R6010使用错误;std:: stoi

R6010 Error When Using; std::stoi

本文关键字:std stoi 错误 R6010      更新时间:2023-10-16

我一直从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 ...
}