如何写一个整数到一个文件(fprintf和fwrite之间的差异)

Sha*_*ano 12 c printf fwrite

我一直在尝试将一个整数写入文件(打开模式是w).fprintf写得正确,但fwrite写了乱码:

int length;
char * word = "word";

counter = strlen(word);
fwrite(&length, sizeof(int), 1, file);
fwrite(word, sizeof(char), length, file);
Run Code Online (Sandbox Code Playgroud)

并且文件中的结果是:

但如果我改用fprintf,就像这样:

int length;
char * word = "word";

counter = strlen(firstWord);
fprintf(file, "%d", counter);
fwrite(word, sizeof(char), length, file);
Run Code Online (Sandbox Code Playgroud)

我在文件中得到了这个结果:

4word

谁能说出我做错了什么?谢谢!

更新:我最终想把写入改为二进制(我将以wb模式打开文件),我的实现会有区别吗?

van*_*nza 21

fprintf写一个字符串.fwrite写字节.所以在你的第一种情况下,你要将表示整数的字节写入文件; 如果其值为"4",则四个字节将处于不可打印的ASCII范围内,因此您不会在文本编辑器中看到它们.但是如果你看一下文件的大小,它可能是8,而不是4个字节.

  • @hershalle:是的. (4认同)
  • 所以如果我想以二进制模式写一个整数,我应该使用 fwrite,但是如果我以文本方式写入文件,我应该使用 fprintf? (2认同)