我遇到了一个问题,不知道它为什么发生。基本上我有一个讨厌的函数,它解析一个文本文件并返回所需参数名称后存储在一行中的多个值的下一个条目。它的工作原理,我不认为有必要发布其代码。但问题是:在一个循环中我想用一个衬垫)从的atoi(返回一个整数值赋值给一个变量:函数返回string.c_str()作为atoi()意外行为的参数
for (...)
{
int fieldId = atoi(fileParser.getNextValueOfParameter("fieldIdArray").c_str());
std::cout << fieldId << " ";
}
不幸的是分配给第一个值fieldId期间变量第一轮循环总是。剩下的值分配正确。
但是,不是一个班轮分配当我使用字符串来存储我的解析函数返回的文本,然后单独进行转换后的数字值分配给 INT - 一切完美:
for (...)
{
std::string fieldIdString = fileParser.getNextValueOfParameter("fieldIdArray");
int fieldId = atoi(fieldIdString.c_str());
std::cout << fieldId << " ";
}
所有值都对应于存储在我的文件中的实际文本编号。在第一次循环传递期间没有分配的值。
这两个代码仅在使用临时串变量来存储文本的一个问题是不同的,将其转换为 .c_str()内部的atoi(),作为它的参数之前。
为什么会发生? 如果这很重要,我正在使用TDM-GCC 4.7.1 32位编译器。
? –
@JonathonReinhart,因为有了这个错误的编译器版本,我不能使用_std :: stoi_,我想要一个快速的解决方法,它是_atoi()_,我希望它能够工作。 – wowowo
getNextValueOfParameter的返回类型是什么?分成两行会做两件事:(1)它延长了返回值的生命周期,并且(2)如果返回值是一个引用,它会复制返回值。 –