C ++ substr out_of_range错误

时间:2017-08-22 08:36:00

标签: c++ string

我是C ++语言的新手,我一直在寻找明确的答案,但没有结果。我想要做的是获取文本文件中单行的字符串的substr值。当我像这样编辑汇编时,我会收到前十二个字母的句子,我没有问题:

a[count] = sentence.substr(0,12);

但是当我尝试将pos0更改为任何其他值时,例如:

a[count] = sentence.substr(1,12);

我收到错误:

  

在抛出std :: out_of_range的实例后终止调用   what():basic_string :: substr:_pos(这是1)这个 - > size()(为0)

我使用YT和在线指南进行了检查,没有人遇到substr的问题。 有什么想法吗?

编辑: 抱歉造成混乱。这是代码的一部分:

string sentence;
string a[10000];
string next_line[10000];

main()
{

int count = 1;    


fstream file;
file.open("converted.txt",ios::in);

while(!file.eof())
{
   getline(file, line);
   next_line[count] = line;
   sentence = next_line[count];

   a[count] = sentence.substr(1,12);

   count++;
}

}

1 个答案:

答案 0 :(得分:1)

来自feof

  

此指标通常由流上的上一步操作设置   尝试在文件结尾处读取或超过文件结尾。

这意味着您在条件为false之前已阅读多一行。 此行为空

来自substr

  

子字符串是以字符开头的对象部分   位置pos和spans len字符(或直到字符串的结尾,   以先到者为准)

因此,如果您使用substr第一个参数0,那就没问题,它被跳过了。但是如果你传递1作为第一个参数,这更多的是字符串有字符,则抛出异常。

这是从文件中正确读取

#include <iostream>
#include <fstream>

using namespace std;

string sentence;
string a[10000];
string next_line[10000];

int main()
{

    int count = 1;
    std::string line;

    fstream file;
    file.open("test.txt",ios::in);

    while(getline(file, line))
    {
       next_line[count] = line;
       sentence = next_line[count];

       a[count] = sentence.substr(1,12);

       count++;
    }
}