Ваша программа делает
fp=fopen(argv[0], "r+b");
argv [0] содержит имя запущенного исполняемого файла, вы хотите argv[1]
, первый параметр командной строки. Следующая проблема, с которой вы, вероятно, столкнетесь (при запуске с ID3v2), - выравнивание полей структуры, в зависимости от используемых типов данных, компилятор может оставить «пробелы» между последовательными элементами структуры. Чтобы избежать этой проблемы, компилятору следует дать указание выровнять структуру по границам байтов с (в большинстве случаев проверьте документацию вашего компилятора)
#pragma pack(1)
Этот Структура заполнения и упаковки ТАК ответ ясно объясняет, что происходит, если вы не используете правильную упаковку.
Также см. макет ID3V1 , после отдельных полей не всегда есть завершающий 0, поэтому
printf("%s\n", fileTag.tagMark);
напечатает TAG, за которым следует название песни (printf% s останавливается только при обнаружении \ 0).
ИМХО, учитывая джунгли, что ID3 - это, вероятно, вам лучше делегировать необработанные манипуляции ID3 в существующую библиотеку, такую как id3lib , и сосредоточиться на функциональности вашего редактора.