fgets — максимальный размер (int num)

#c #fgets

#c #fgets

Вопрос:

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

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

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

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

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

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

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

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

Ответ №1:

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

Ответ №2:

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

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

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