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