你好我的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
答案 0 :(得分:1)
代码中只有一个字符缓冲区(除文字字符串外)。 const char*
是指向字符缓冲区的指针,而不是作为原始文件副本的新缓冲区。
因此,很自然地,每次调用Color :: Text时,您都在相同的字符缓冲区上写入,并且所有指向它的指针都会读取相同的内容。
你必须理解C和C ++中指针的概念。
在这种情况下,在C ++中,对于您需要的行为,您应该将const char*
的所有用法替换为std::string
。
我推荐你的书#34; Accelerated C ++&#34;学习C ++很容易,而不需要进入语言中有点过时的细节。