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

时间:2015-07-19 00:51:49

标签: c++ string outofrangeexception

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

我注意到当我从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;

1 个答案:

答案 0 :(得分:0)

{C}标准中的substr()方法定义如下:

  

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(),{{1}的大小class instance。

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

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