2015-07-19 2 views
0

Я пытаюсь создать подстроки из моего из каждой строки моего входного файла.Ошибка при создании подстрок из входного файла

Я заметил, что когда я создаю подстроку из подстроки (0,2) положения нуля, то она печатает правильно, но если я начну из любых больше 0 он выдает эту ошибку:

LibC++ abi.dylib: прекращение с неперехваченного исключением типа станд :: 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; 
+2

Можем ли мы увидеть кусок файла test-file.txt? (не только формат) Добавьте его к вопросу, а не к комментарию, pls. – belwood

+0

Вы должны всегда проверять размер строки перед выполнением операции подстроки. Что, если, например, у вас пустая строка? –

+1

Вы проверяете перед чтением, а не после чтения! Используйте 'while (std :: getline (infile, STRING))'. Кроме того, вам нужно иметь по крайней мере 4 символа в строке для вашего 'STRING.substr (2, 2)' для успеха. Вы должны убедиться, что это так (при вашей текущей настройке вы получите неопределенное поведение после последней строки). –

ответ

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.

Вы передаете «2» для параметра «pos», поэтому этот метод генерирует исключение, если длина строки меньше 2 символов.

Если ваш код читает пустую строку из файла, строка size() будет меньше двух, и ваш код выдает исключение.

Смежные вопросы