我一直在尝试将一个整数写入文件(打开模式为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模式打开文件),我的实现会有区别吗?
答案 0 :(得分:20)
fprintf
写一个字符串。 fwrite
写入字节。所以在你的第一种情况下,你要将表示整数的字节写入文件;如果其值为“4”,则四个字节将处于不可打印的ASCII范围内,因此您不会在文本编辑器中看到它们。但是如果你看一下文件的大小,它可能是8,而不是4个字节。
答案 1 :(得分:1)
使用printf()
将整数转换为一系列字符,在本例中为"4"
。使用fwrite()
会导致写入包含整数值的实际字节,在本例中为字符'w', 'o', 'r',
和'd'
的4个字节。