【发布时间】:2023-08-27 19:12:01
【问题描述】:
我目前正在创建二进制文件。这是我尝试过的。
示例 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 并没有给我正确的输出。它将我提供的输入字符串写入文件并附加一些数据(二进制形式)。
我不明白,我无法弄清楚我在做什么。
【问题讨论】:
-
在 fwrite() 调用中,您应该使用 strlen(str),而不是“sizeof str”。另外,例如“hexdump file.bin”中的文件内容是什么样的?
-
示例 2 做的是正确的事情。您写出了 ASCII 值,它们是字符的二进制表示。因此,如果您检查文件,您当然会看到该字符串。在那之后,由于你写了 256 个字节,你还将得到内存中那些字符之外的任何 gobblety gook,但你的字符串比这短。
-
别忘了关闭文件
fclose(fp);。 -
对像
strcpy和strlen这样的空终止字符串使用函数对于二进制数据来说似乎是个坏主意。