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

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

int length; char * word = "word"; counter = strlen(word); fwrite(&length, sizeof(int), 1, file); fwrite(word, sizeof(char), length, file); 

并且文件中的结果是:

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

 int length; char * word = "word"; counter = strlen(firstWord); fprintf(file, "%d", counter); fwrite(word, sizeof(char), length, file); 

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

4word

任何人都可以告诉我做错了什么? 谢谢!

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

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

使用printf()将整数转换为一系列字符,在本例中为"4" 。 使用fwrite()会导致包含整数值的实际字节被写入,在这种情况下,字符'w', 'o', 'r','d'的4个字节。