fgets - максимальный размер (int num) - PullRequest
1 голос
/ 26 мая 2011


В моей программе я вызываю функцию fgets:

char * fgets ( char * str, int num, FILE * stream );  

в цикле несколько раз, а затем обработайте новый поступающий вход (если он есть).

в спецификации fgets говорит, что:

Num: Максимальное количество символов для чтения (включая последний нуль-символ). Обычно длина массива, переданного как str, используется.

Проблема состоит в том, что я хочу повторно указывать НЕТ БОЛЬШЕ, чем указанное число - и игнорировать остальное, если оно находится в той же строке.

Что я обнаружил, так это то, что fgets читает следующую часть строки при следующем вызове функции.

Как я могу избежать этого поведения?

Ответы [ 2 ]

1 голос
/ 26 мая 2011

Вам нужно будет сделать это вручную - использовать символы с fgets и копировать результаты в массив результатов, пока не будет найден символ новой строки, сбросить содержимое и продолжить с fgets.

0 голосов
/ 26 мая 2011

Параметр размера предназначен для предотвращения чтения большего количества данных, чем может вместить ваш буфер. Это не будет работать для пропуска данных.

Вам нужно будет написать код, чтобы отбросить ненужные части строки после ее прочтения.

fgets () - старая функция Си. Идея состоит в том, что язык будет предоставлять функции минимальной сложности, которые вы можете комбинировать, чтобы делать то, что вам нравится. Они не включают никаких дополнительных возможностей специально. Это мешает всем платить за вещи, которые они не используют. Думай LEGO.

...