读取字符串C ++的字符时出错

时间:2017-08-10 01:56:17

标签: c++ string char

我正在尝试存储来自

的值
KeyDerivation.Pbkdf2

进入一个const char *变量 - 在.h文件中声明 - 以这种方式:

vector<vector<string>> data;

当我调试程序时,我注意到变量heightmapName = data[0][1].c_str(); 返回此

heightmapName

但是,如果我声明一个新的heightmapName 0xcdcdcdcd <Error reading characters of string.> const char * 并将其初始化为:

const char*

const char* what = data[0][1].c_str(); heightmapName = data[0][1].c_str(); 变量可以很好地存储数据,而what却没有。

这是功能:

heightmapName

为什么会这样?我该如何解决这个问题?

PS。我正在使用视觉工作室2017

1 个答案:

答案 0 :(得分:1)

无论问题或实施方式如何,假设heightmapName的类型确实是const char *,那就不起作用。

data的生命周期受fileParser生命周期的约束。见What is std::string::c_str() lifetime?

因此,在该函数结束时,data[0][1].c_str()指向的数据将无效。

如果需要,请考虑复制数据。或者将heightmapName设为std :: string。

(附加提示:如果它是指针,请考虑应用五条规则:How to actually implement the rule of five? - 避免手动内存管理的另一个原因)

一般情况下,我通过使用智能指针或为我管理内存的结构(例如std :: string)来避免C ++类中的原始指针,这意味着我不需要担心3的规则或规则5因为我不需要手动管理这些资源。

更新:你提到它&#34;工作&#34;为你(现已删除)的要点。

在生命周期结束后访问类似的内存是未定义的。一种行为很可能是它神奇地#34;工作&#34;。最有可能的是,记忆还没有被覆盖。