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

Error creating substrings from input file

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

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

libc++abi.dylib:终止并出现 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().

所以,pos参数,substr()方法的第一个参数,必须小于等于size(),std::basic_string class 实例.

您正在为 "pos" 参数传递“2”,因此如果您的字符串长度少于 2 个字符,此方法将抛出异常。

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