Как использовать строку формата fscanf ()

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

1
задан Harris McCullers 11 April 2019 в 06:28
поделиться

1 ответ

Проблема здесь в том, что формат "%s" считывает пробел разделенных строк, и, поскольку в 03f8ab8,1 нет пробела, все они будут читаться как одна строка.

Вы можете решить это с помощью формата "%[", который позволяет вам иметь очень простое сопоставление с образцом. Например, вы можете использовать его, чтобы указать fscanf читать все до (но не включая) запятую. Как

fscanf(file, "%s %[^,], %d", operation, address, &size)

См., Например, эта scanf (и семейная) ссылка для более подробной информации.

Кроме того, вы не должны сравнивать результат fscanf с -1, вместо этого убедитесь, что он проанализировал правильное количество последовательностей, сравнив возвращаемое значение с 3:

while (fscanf(file, "%s %[^,], %d", operation, address, &size) == 3) ...

Обратите внимание, что приведенный выше формат не будет накладывать никаких ограничений на строки, которые он будет читать. Это может привести к переполнению ваших строк. Если ваши строки имеют фиксированный размер (т.е. они являются массивами), тогда используйте максимальную ширину поля формата, чтобы ограничить количество символов, которые fscanf будет читать и помещать в ваш массив.

Например (вообще ничего не зная о ваших реальных строках / массивах):

while (fscanf(file, "%1s %8[^,], %d", operation, address, &size) == 3) ...

С учетом вышеизложенного, первая строка не может быть длиннее одного символа, а вторая может ' не может быть длиннее восьми символов. Обратите внимание, что эти числа не включают строковый нулевой терминатор (для которого вам нужно место в ваших массивах сверх указанного выше размера).

0
ответ дан Some programmer dude 11 April 2019 в 06:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: