2013-06-11 3 views
0

Если у меня есть текстовый файл с каждой строкой разной длины, как работает следующий код?Файл, читаемый в 'c' с использованием fgets

FILE *ptr; 
char str[100]; 
ptr=fopen("hi.txt","r"); 
while(fgets(str,100,ptr)!=NULL) 
{ 
........ 
........ 
} 

В этом коде «ул» будет содержать 100 символы, который включает некоторые символы из 2-ой строки текстового файла (если первая строка файла составляет 90 символов, то 10 символов из второй строки будут также прочитать) .. Если я прав, можете ли вы рассказать, как читать ровно одну строку во время каждой готовности?

+2

Это не так, как работает 'fgets'. Ранее прочитанная строка будет перезаписана следующей line. 'fgets' перестает читать, когда попадает на новый символ строки. –

+0

Так что, если первая строка больше, чем 100 символов? – user1762571

+3

@ user1762571, тогда 'fgets' считывает только до 99 символов. –

ответ

2

fgets будет считывать до одной строки ИЛИ значение, переданное в качестве второго параметра.

fgets man page

Пока никто из ваших линий не длиннее 99 символов (экономия один для терминатора NUL, ваш код будет работать, как ожидалось.

Если вы звоните fgets на линии, которая больше чем N-1, ваше следующее чтение будет продолжено там, где оно остановилось, и перейдет еще 99 байт или пока не найдет конец строки.

+0

получил это. Так какой эффективный способ прочитать полную строку в одном чтении. Выделяет ли массив большого размера или каким-либо другим способом? – user1762571

+0

Невозможно гарантировать, что вы можете прочитать полную строку без разбора через файл заблаговременно, чтобы узнать, как долго длится самая длинная строка и выделяется для самой длинной строки (+1) или гарантировать, что линия никогда не будет длиннее некоторой заданной длины , – xaxxon

+0

, поэтому, если вы читаете его с помощью fgetc, мы можем правильно определить конец каждой строки правильно? – user1762571

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