Const char * странное поведение

Здравствуйте, у меня проблемы с const char * странным образом.
Color :: Text () возвращает статический массив char, но он также используется для инициализации указателя const char * для массива.

Что мне делать, если я хочу, чтобы rofl :: Default действительно работал, а не был последним «const char», который производил Color :: Text?

#include <windows.h>
class Color
{
public:
int R;
int G;
int B;
int A;
Color(int r, int b, int g, int a = 255)
{
R = r;
G = g;
B = b;
A = a;
}
const char* Text()
{
static char Texts[124];
snprintf(Texts, 124, "%i %i %i %i", R, G, B, A);
return Texts;
}
}
class rofl
{
public:
const char* Default;
const char* Value;
rofl(const char* d)
{
Default = d;
Value = d;
}
}

rofl dood("0");
rofl doaaod(Color(0,0,0).Text());
rofl xxxx(Color(0,55,0).Text());

int main()
{
printf("%s %s\n", dood.Default, dood.Value);
printf("%s %s\n", doaaod.Default, doaaod.Value);
printf("%s %s\n", xxxx.Default, xxxx.Value);
return 0;
}

выход:

0 0
0 55 0 0 0 0
0 55 0 0 55 0

-4

Решение

В вашем коде только один символьный буфер (кроме буквенных строк). const char* это указатель на символьный буфер, а не новый буфер, который является копией оригинала.

Поэтому естественно, что каждый раз, когда вы вызываете Color :: Text, вы пишете через один и тот же символьный буфер, и все указатели на него читаются одинаково.

Вы должны понимать понятие указателей в C и C ++.

В этом случае в C ++ и для поведения, которое вам нужно, вы должны заменить все виды использования const char* от std::string,

Я рекомендую вам книгу «Ускоренный C ++», чтобы легко выучить C ++, не вдаваясь в детали, которые немного архаичны в языке.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector