В настоящее время я работаю над созданием двоичного файла. Вот что я пробовал.создать двоичный файл в C
Пример 1:
#include<stdio.h>
int main() {
/* Create the file */
int a = 5;
FILE *fp = fopen ("file.bin", "wb");
if (fp == NULL)
return -1;
fwrite (&a, sizeof (a), 1, fp);
fclose (fp);
}
return 0;
}
Пример 2:
#include <stdio.h>
#include <string.h>
int main()
{
FILE *fp;
char str[256] = {'\0'};
strcpy(str, "3aae71a74243fb7a2bb9b594c9ea3ab4");
fp = fopen("file.bin", "wb");
if(fp == NULL)
return -1;
fwrite(str, sizeof str, 1, fp);
return 0;
}
Пример 1 дает правильный вывод в двоичной форме. Но пример 2, где я передаю строку, не дает мне правильного вывода. Он записывает входную строку, которую я дал в файл, и добавляет некоторые данные (двоичная форма).
Я не понимаю, и я не могу понять, какую ошибку я делаю.
Вместо «sizeof str» в вызове fwrite() вы должны использовать strlen (str). Кроме того, как выглядит содержимое файла, например, из «hexdump file.bin»? – donjuedo
Пример 2 - это правильная вещь. Вы выписали значения ASCII, которые представляют собой двоичные представления символов. Поэтому, конечно, вы увидите строку, если вы проверите файл. После этого вы также получите доступ к тому, что gobblety gook находится за пределами тех символов в памяти, поскольку вы написали 256 байтов, но ваша строка короче. – lurker
Не забудьте закрыть файл 'fclose (fp);'. – user3337714