UrbanRider
@UrbanRider

Вывод массива символов cout из структуры другого класса

Словами наверное будет труднее объяснить, сразу показываю код:

файл класса ConsoleFitches
#include #include <string.h>
using namespace std;
class ConsoleFitches
{
public:
void SetAttDefault() const {char att[]="\033[0m";cout << att;};
void SetAttBold() const {char att[]="\033[1m";cout << att;};
void SetAttBlink() const {char att[]="\033[5m";cout << att;};
void SetTextColor(char color[5]) const{cout<<color;};
void SetBgColor(char* color[5]) const{cout<<color;};
ConsoleFitches();
struct Color
{
char Black[5];
char Red[5];
char Green[5];
char Brown[5];
char Blue[5];
char Violet[5];
char Cyan[5];
char Gray[5];
};
Color TextColor,BgColor;
};
ConsoleFitches::ConsoleFitches()
{
Color TextColor,BgColor;
strcpy(TextColor.Black,"\033[30m");
strcpy(TextColor.Red,"\033[31m");
strcpy(TextColor.Green,"\033[32m");
strcpy(TextColor.Brown,"\033[33m");
strcpy(TextColor.Blue,"\033[34m");
strcpy(TextColor.Violet,"\033[35m");
strcpy(TextColor.Cyan,"\033[36m");
strcpy(TextColor.Gray,"\033[37m");
strcpy(BgColor.Black,"\033[40m");
strcpy(BgColor.Red,"\033[41m");
strcpy(BgColor.Green,"\033[42m");
strcpy(BgColor.Brown,"\033[43m");
strcpy(BgColor.Blue,"\033[44m");
strcpy(BgColor.Violet,"\033[45m");
strcpy(BgColor.Cyan,"\033[46m");
strcpy(BgColor.Gray,"\033[47m");
};


Основной файл программы:
#include #include "ConsoleFitches.cpp"
using namespace std;
int main()
{
ConsoleFitches cf;
cf.SetTextColor(cf.TextColor.Red);;
cout<<"HELLO";
cf.SetAttDefault();
return 0;
}


Результатом программы должна быть надпись HELLO красного цвета. Вместо этого выводится кракозябр+HELLO.

Если же сделать напрямую cout<<"\033[31m", а за ним вывести текст, то все нормально.

Подскажите где я туплю, пожалуйста.
  • Вопрос задан
  • 2718 просмотров
Пригласить эксперта
Ответы на вопрос 3
mark_ablov
@mark_ablov
код ужасен :)
для решения проблемы — расширьте буферы до 6 символов, ибо нужен еще завершающий ноль
Ответ написан
umcherrel
@umcherrel
Вы создали переменные в конструкторе, здесь явно ошибка.
Ответ написан
UrbanRider
@UrbanRider Автор вопроса
Огромное вам спасибо, вы оба были правы. Следовало увеличить буфер до 6 символов, а также экземпляры структуры создать в объявлении класса, а в конструкторе их заполнить.

Работающий код теперь выглядит так:
#include #include <string.h>
using namespace std;
class ConsoleFitches
{
public:
void SetAttDefault() const {char att[]="\033[0m";cout << att;};
void SetAttBold() const {char att[]="\033[1m";cout << att;};
void SetAttBlink() const {char att[]="\033[5m";cout << att;};
void SetTextColor(char color[5]) const{cout<<color;};
void SetBgColor(char* color[5]) const{cout<<color;};
ConsoleFitches();
struct Color
{
char Black[6];
char Red[6];
char Green[6];
char Brown[6];
char Blue[6];
char Violet[6];
char Cyan[6];
char Gray[6];
};
Color TextColor,BgColor;
};
ConsoleFitches::ConsoleFitches()
{
strcpy(TextColor.Black,"\033[30");
strcpy(TextColor.Red,"\033[31m");
strcpy(TextColor.Green,"\033[32");
strcpy(TextColor.Brown,"\033[33");
strcpy(TextColor.Blue,"\033[34");
strcpy(TextColor.Violet,"\033[35");
strcpy(TextColor.Cyan,"\033[36");
strcpy(TextColor.Gray,"\033[37");
strcpy(BgColor.Black,"\033[40");
strcpy(BgColor.Red,"\033[41");
strcpy(BgColor.Green,"\033[42");
strcpy(BgColor.Brown,"\033[43");
strcpy(BgColor.Blue,"\033[44");
strcpy(BgColor.Violet,"\033[45");
strcpy(BgColor.Cyan,"\033[46");
strcpy(BgColor.Gray,"\033[47");
};

Также хотелось бы получить уточнение, чем этот код ужасен, и как написать правильно?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы