从输入文件创建子字符串时出错

Error creating substrings from input file

本文关键字:出错 字符串 输入 文件创建      更新时间:2023-10-16

我试图从我的输入文件的每一行创建子字符串。

我注意到,当我从substr(0,2)位置0创建子字符串时,它会正确打印出来,但如果我从大于0的任何地方开始,它会抛出这个错误:

libc + + abi。以未捕获的std::out_of_range: basic_string类型异常结束

我也在阅读这种格式的行40AF FF A9

int main() 
{
  string STRING;
  ifstream infile;
  infile.open("test-file.txt");
  while(!infile.eof())
  {
     getline(infile, STRING);
     string tag = STRING.substr(2,2);
     cout << tag << endl;
  }
  return 0;

substr()方法在c++标准中定义如下:

21.4.7.8 basic_string::substr [string::substr]

basic_string

 substr(size_type pos = 0, size_type n = npos) const;
 1 Requires: pos <= size()
 2 Throws: out_of_range if pos > size().

因此,substr()方法的第一个参数pos必须小于或等于size(),即std::basic_string类实例的大小。

将"2"传递给"pos"形参,因此如果字符串长度小于2个字符,此方法将抛出异常。

如果您的代码从文件中读取空行,则字符串的size()将小于2,并且您的代码将抛出异常。