Я очень смущен этой маленькой проблемой, которую у меня есть. У меня есть заголовок формата без индексации. (более конкретно заголовок ID3). Теперь этот заголовок хранит строку или, скорее, три байта для конформации, что данные на самом деле являются тегами ID3 (TAG
- это строка бит.) Точка, теперь, когда этот TAG
в формате файла не равен нулю -завершённый. Таким образом, есть две вещи, которые можно сделать:Формат файла стиля строки стиля C
- Загрузить весь файл с
fread
и незавершенных сравнения строк, используютstrncmp
. Но:- Это звучит Hacky
- Что делать, если кто-то открывает его и пытается манипулировать строку без предварительного знания этого?
- Другой вариант заключается в том, что файл загружается, но структура C не должна точно соответствовать формату файла, но включает в себя правильные нуль-терминаторы, а затем каждый член должен быть загружен с использованием уникального вызова. Но, это тоже чувствует себя взломанным и утомительным.
Помочь, особенно от людей, имеющих практический опыт общения с такими вещами, ценится.
И для синтаксического анализа, конкретных, хорошо известных форматов файлов, используйте библиотеку. –
Я говорил о более общем: что, если это была длинная длинная цепочка? – aviraldg
Когда вы пишете парсер формата файла, вы обычно работаете с хорошо известными тегами/метаданными. Кроме того, из того, что я понял, ваш код касается обнаружения и не столько синтаксического анализа. Таким образом, вышеуказанный подход достаточно. В случае, если есть произвольно длинная строка, заголовок, скорее всего, будет иметь поле длины, чтобы вы могли «malloc» так много заранее и считали данные. – dirkgently