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。