使用时R6010错误;的std :: Stoi旅馆

时间:2014-03-24 18:15:13

标签: c++ string std

我从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格式表示所有数据行的一些指导。

1 个答案:

答案 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 ...
}