Есть два способа сохранить строку ASCIIZ в структуре, например:
struct asciiz_1
{
char asciiz[32];
};
struct asciiz_2
{
size_t buflen;
char *buffer;
};
Первый (struct asciiz_1
) может обрабатываться так же, как ваш struct data
; даже если строка может иметь переменную длину с мусором после нулевого (нулевого) байта, структура в целом имеет фиксированный размер и может безопасно обрабатываться с помощью fread()
и fwrite()
.
Второе (struct asciiz_2
) - безнадежное дело. Вы должны выделить дополнительное пространство для получения строки (предположительно, после чтения длины), и значение указателя не должно записываться в файл (это не будет иметь никакого значения для процесса чтения). Таким образом, вы должны обращаться с этим по-другому.
Ваша структура данных - ваш выбор.