结构字符数组中的奇怪行为

Odd Behavior in Struct Char Array

本文关键字:字符 数组 结构      更新时间:2023-10-16

我正在将 c++ const char*存储到一个

结构中,该结构在标头中定义如下:
struct Info {
  const char* data;
};

然后,我在类标头中有一个结构体的实例:

class System {
  Info info; 
}

我这样设置:

info.data = myStr.c_str();

然后我像这样打印几次:

std::cout << info.data;

然而奇怪的是,前两次我打印出来时它工作正常,显示正确的字符串。但是,当我第三次这样做时,我得到这个:

Output: ���

使用三个随机二进制字节字符(问号)。

我在每次打印之间根本不触摸变量。知道为什么会这样吗?

也许你已经排除了这一点,但几乎每次这种情况发生在我身上都是因为我没有注意我调用 .c_str() 的字符串的范围。常量字符* 在字符串死亡后不存活,并且您会出现此行为。

c_str() 返回的是一个指向由 myStr 数据类型对象管理的缓冲区的指针。当字符串被销毁时,它将被释放,之后指针将不再有效。如果修改字符串,指针也将失效。虽然你确实提到你在每个输出之间什么都不做,但谁知道内存中实际发生了什么,所以我建议不要分配指向 info.data 的指针,而是将 myStr 的值复制到 info.data。