c++ - R6010 使用时出错; std::stoi

标签 c++ string std

我从 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/

相关文章:

c - 字符串数组插入问题

c++ - unique_ptr<Expression>::Operator '=' 不可访问

c++ - 删除函数的 std::map

c++ - QTextEdit 和自定义滚动 - PageDown/PageUp

c++ - 连续计算器程序的段错误

c++ - 运行时检查错误2

c++ - C++11 中的函数签名差异

python - 如何反转 Pandas 数据框中的字符串?

delphi - 需要在 Delphi 字符串复制之前分配内存吗?

c++ - Qt - 混合 Qt 和 std::C++ 类型