C fwrite和文件大小

时间:2013-12-06 01:28:22

标签: c file fopen fwrite

我对一个奇怪的问题感到困惑。当我做下面的事情时:

FILE* fl;
int* d = new int[3];
d[0] = -3;
d[1] = -3;
d[2] = -3;

plik = fopen("E:\data.txt","r+b");
fwrite((char*)d, sizeof(int), sizeof(int)*3, fl);
fclose(fl);
system("pause");

它正确地将一些数据写入文件,我可以在记事本中清理并获得0B文件大小。但如果我将-3改为-2:

FILE* fl;
int* d = new int[3];
d[0] = -2;
d[1] = -2;
d[2] = -2;

plik = fopen("E:\data.txt","r+b");
fwrite((char*)d, sizeof(int), sizeof(int)*3,fl);
fclose(fl);
system("pause");

结果是,当我在记事本中清理数据并保存文件时,它总是2B,并且无法清除到最后。问题是什么?。提前谢谢。

3 个答案:

答案 0 :(得分:1)

记事本显然会混淆你用unicode byte order mark写的数据,并进入一些有趣的状态。

考虑一下你所编写的数据将如何以二进制形式显示,以及它可能对文本编辑器做些什么。

答案 1 :(得分:1)

当您打开文件时,将其分配给变量名称plik

plik = fopen("E:\data.txt","r+b");

但你写的是未初始化的变量fl。

fwrite((char*)d, sizeof(int), sizeof(int)*3,fl);

写入的大小不应与sizeof(int)相乘。

fwrite((char*)d, sizeof(int), 3,fl);

答案 2 :(得分:1)

您正在将二进制数据写入文件,然后使用文本编辑器打开它。结果是未定义的。当您在文档中看到“UNDEFINED”这个词时,请注意。你不应该做那样的事情。文本编辑器用于打开文本文件,这意味着字符串。将int写入文本文件的方法是执行以下操作:

char str[BIGNUMBER];
sprintf(str, "%d", d[0]);
fwrite...

这可能不是您想要的,但它是获取与记事本兼容的文本文件的唯一方法。您可能想要做的是找到一个可以打开,显示和编辑二进制文件的二进制文件编辑器。就个人而言,即使在Windows上,我也只是使用带-b选项的vim。