我正在尝试打印文件中每行指示的行,但在使用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";
请你解释一下为什么会这样?
提前感谢您的帮助。
答案 0 :(得分:0)
试试这个。
- 传递一个字符串参数stoi(lines);
醇>
如果不起作用
- 把它放在stoi之前:lines.append(“”);
醇>
如果仍然是错误,那么
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。