Struct Char 数组中的奇怪行为
Odd Behavior in Struct Char Array
我正在将 c++ const char*
存储到 header 中定义的结构中,如下所示:
struct Info {
const char* data;
};
然后我在 class header:
中有一个结构实例
class System {
Info info;
}
我是这样设置的:
info.data = myStr.c_str();
然后我像这样打印几次:
std::cout << info.data;
然而奇怪的是,前两次我打印出来它工作正常,显示正确的字符串。然而,我第三次这样做时,我得到了这个:
Output: ���
用三个随机的二进制字节字符(问号)。
我在每次打印之间根本不触及变量。知道为什么会这样吗?
也许您已经排除了这种可能性,但几乎每次我遇到这种情况都是因为我没有注意调用 .c_str() 的字符串的范围。 const char* 在字符串消失后不存在,你会得到这种行为。
what c_str() returns 是指向由 myStr 的数据类型对象管理的缓冲区的指针。当字符串被销毁时,它将被释放,之后指针将不再有效。如果您修改字符串,指针也会失效。
虽然你确实提到你在每个输出之间什么都不做,但谁知道内存中实际发生了什么,所以我建议不要将指针分配给 info.data,而是将 myStr 的值复制到 info.data。
我正在将 c++ const char*
存储到 header 中定义的结构中,如下所示:
struct Info {
const char* data;
};
然后我在 class header:
中有一个结构实例class System {
Info info;
}
我是这样设置的:
info.data = myStr.c_str();
然后我像这样打印几次:
std::cout << info.data;
然而奇怪的是,前两次我打印出来它工作正常,显示正确的字符串。然而,我第三次这样做时,我得到了这个:
Output: ���
用三个随机的二进制字节字符(问号)。
我在每次打印之间根本不触及变量。知道为什么会这样吗?
也许您已经排除了这种可能性,但几乎每次我遇到这种情况都是因为我没有注意调用 .c_str() 的字符串的范围。 const char* 在字符串消失后不存在,你会得到这种行为。
what c_str() returns 是指向由 myStr 的数据类型对象管理的缓冲区的指针。当字符串被销毁时,它将被释放,之后指针将不再有效。如果您修改字符串,指针也会失效。 虽然你确实提到你在每个输出之间什么都不做,但谁知道内存中实际发生了什么,所以我建议不要将指针分配给 info.data,而是将 myStr 的值复制到 info.data。