我尝试从输入文件的每一行创建子字符串。
我注意到当我从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;
答案 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,并且您的代码将抛出异常。