我从 std::stoi()
调用中收到错误 R6010 - abort() has been called.
现在已经找出原因,我开始吧通过显示手头的代码;
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文件超过1行数据时会出现错误。
我还应该注意到 cmemblock
是以 CharArrayPtr 格式存储的文本文件。
我需要的是关于如何以 int 格式表示所有数据行的指导。
最佳答案
std::stoi()
期望在传递的 std::string
参数中看到单个数字输入,例如:
int x = std::stoi("12345");
没有多余的字符、行尾、多行等。您可以使用从 str
初始化的 std::istringstream
或者:
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 ...
}
关于c++ - R6010 使用时出错; std::stoi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22617423/