0

我正在尝试打印文件中每一行上指示的行,但在使用 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";

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

提前感谢您的帮助。

4

2 回答 2

0

Try to use std::stoul() function. It parses unsigned long values and probably has bigger range (depends on CPU / OS). On Windows, i had problem to parse without index parameter, so at all, it could looks like std::stoul(line, 0). Exists std::stoull for unsigned long long either.

于 2016-12-02T00:15:32.523 回答
0

尝试这个。

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

如果它不起作用

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

如果仍然错误,那么

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

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

于 2016-03-04T05:22:49.643 回答