我从R6010 - abort() has been called.
来电中收到错误std::stoi()
,现在已经找到了原因,通过显示手头的代码开始了;
std::string str;
for (int i = 0; i < numberofvalues; i++)
{
str = cmemblock[i];
if (cmemblock[i] == '\n' || cmemblock[i] == '\r')
{
cout << cmemblock[i] << endl;
}
else
{
int number = std::stoi(str);
cout << number;
}
}
此阶段程序的目的是读取.txt文件并以int格式显示输出,当.txt文件包含多行数据时会发生错误。
我还应该注意cmemblock
是以CharArrayPtr格式存储的文本文件。
我需要的是关于如何以int格式表示所有数据行的一些指导。
答案 0 :(得分:1)
std::stoi()
期望在std::string
参数中看到一个数字输入,例如:
int x = std::stoi("12345");
预计不会有额外的字符,行结尾,多行等。您可以使用std::istringstream
初始化的str
:
std::string str = &(cmemblock[0]);
std::istringstream iss(str);
int number;
if(!(iss >> number)) {
// print error ...
}
要随后阅读更多值(由空格或'\n'
分隔),您也可以进行循环:
std::vector<int> numbers;
int number;
while(iss >> number) {
// collect inputs
numbers.push_back(number);
}
if(!iss.eof()) {
// input format error occurred ...
}