В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Проблема здесь в том, что формат "%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) ...
С учетом вышеизложенного, первая строка не может быть длиннее одного символа, а вторая может ' не может быть длиннее восьми символов. Обратите внимание, что эти числа не включают строковый нулевой терминатор (для которого вам нужно место в ваших массивах сверх указанного выше размера).