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

时间:2015-01-12 04:55:04

标签: c++ struct cout

我将c ++ const char*存储到如下标题中定义的结构中:

struct Info {
  const char* data;
};

然后我在类头中有一个struct实例:

class System {
  Info info; 
}

我这样设置:

info.data = myStr.c_str();
然后我按照这样打印几次:

std::cout << info.data;

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

Output: ���

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

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

2 个答案:

答案 0 :(得分:2)

也许你已经排除了这一点,但几乎每次发生这种情况都是因为我没有看到我正在调用.c_str()的字符串的范围。字符串死后,const char *不会生效,你会得到这种行为。

答案 1 :(得分:0)

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