std::stoi 超出范围.从文件转换

std::stoi out of range. Converting from file

本文关键字:文件 转换 范围 stoi std      更新时间:2023-10-16

我正在尝试打印文件中每行指示的行,但在使用 std::stoi 时返回超出范围的异常。文本文件每行都有一个数字,从第一行的 10 到末尾的 0。这就是为什么我不明白为什么超出范围,因为它应该与 int 一起使用,所以 32 位。

这是我的代码:

  if (myfile.is_open()){
    while ( getline (myfile,line) ){
        DirLine = myfile.tellg();
        myfile.seekg(0,0);
        i=0;
        lines = line;
        while (fl){
            j = std::stoi(lines,nullptr,10);
            if (j == i){
                cout << lines <<" - "<<j << 'n';
                myfile.seekg(0,DirLine);
                fl = false;
            }
            getline(myfile,lines);
            i++;
        }
    }
    myfile.close();
  } 
  else cout << "Unable to open file";

你能解释一下为什么会这样吗?

提前感谢任何帮助。

试试这个。

  1. 传递一个字符串参数 stoi(行);

如果它不起作用

  1. 把这个放在 stoi 之前:lines.append(" ");

如果仍然错误,则

string::size_type sz;
stoi(lines,sz);

我认为问题是,在 stoi 返回值之前。 stoi 将尝试找到第一个数字的下一个字符的位置。 并将其分配给指针,如果数字后面没有字符,则该指针将超出界限。因此,要么通过附加任何字符来提供额外的索引,要么尝试使用单个参数。

尝试使用 std::stoul() 函数。它解析无符号的长值,并且可能具有更大的范围(取决于CPU/OS)。在 Windows 上,我在没有索引参数的情况下解析时遇到了问题,所以它看起来像std::stoul(line, 0).存在 std::stoull 表示无符号的长长