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

时间:2015-02-01 00:17:31

标签: c++ file indexoutofrangeexception

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

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

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

试试这个。

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

如果不起作用

  
      
  1. 把它放在stoi之前:lines.append(“”);
  2.   

如果仍然是错误,那么

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

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

答案 1 :(得分:0)

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