读取字符串C++的字符时出错
Error reading characters of string C++
我正在尝试存储来自
vector<vector<string>> data;
以这种方式转换为 const char* 变量 - 在 .h 文件中声明:
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
则不能。
这是函数:
void Configuration::fileParser(string fileName)
{
vector<vector<string>> data;
string line;
string delimiter = " ";
ifstream ss(fileName);
if (ss)
{
while (getline(ss, line))
{
vector<string> dataLine;
string token = line.substr(0, line.find(delimiter));
string value = line.substr(line.find(delimiter) +1);
dataLine.push_back(token);
dataLine.push_back(value);
data.push_back(dataLine);
}
ss.close();
}
//storeData(data);
const char* ahah = data[0][1].c_str();
heightmapName = data[0][1].c_str();
}
为什么会这样?我该如何解决这个问题?
附言。我正在使用Visual Studio 2017
无论问题或实现如何,假设heightmapName
的类型确实是const char *
,这是行不通的。
data
的生存期受文件解析器生存期的约束。 请参阅什么是 std::string::c_str(( 生命周期?
因此,在该函数结束时,data[0][1].c_str()
指向的数据将变为无效。
如果需要,请考虑复制数据。或者将高度映射名称设为 std::string。
(附加提示:如果它是一个指针,请考虑应用五法则:如何实际实施五法则?-避免手动内存管理的另一个原因(
通常,我通过使用智能指针或为我管理内存的结构(例如 std::string(来避免C++类中的原始指针,这意味着我不需要担心 3 规则或 5 规则,因为我不需要手动管理这些资源。
更新:您提到它在(现已删除(要点中为您"工作"。
在生命周期结束后访问内存是不确定的。 一种行为很可能是它神奇地"工作"。 最有可能的是,该内存尚未被覆盖。
相关文章:
- 分段 使用 MPI_Gather 收集字符数组时出错
- 将常量字符* 转换为字符时出错
- 读取字符串C++的字符时出错
- 为什么常量字符*到常量字符转换出错?
- 读取字符串字符时出错 - 对于数组中的字符串值
- 通过字符串::插入插入字符时出错
- 读取字符串字符时出错
- 计算字符串中字符的出现次数时出错
- C++ 使用 Strtok 读取字符串字符时出错
- C++:使用 fgets() 读取字符输入时出错
- C ++ ifstream 无法读取字符串,并且在读取字符时出错
- 尝试将常量字符 [] static_cast<>为无符号字符 * 时出错
- 从字符串中读取字符时出错
- 英特尔 TBB,parallel_pipeline,当我在阶段之间传递常量字符*时出错
- 转换(常量字符*)变量出错
- 为什么我从字符转换为字符时出错
- 读取字符串C++的字符时出错
- wcscpy_s后读取字符串字符时出错
- 读取字符串 的字符时出错.分配内存
- 读取字符串的字符时出错-访问冲突错误C++