如何将整数写入文件(fprintf 和 fwrite 的区别)

Posted

技术标签:

【中文标题】如何将整数写入文件(fprintf 和 fwrite 的区别)【英文标题】:how to write an integer to a file (the difference between fprintf and fwrite) 【发布时间】:2011-09-27 00:43:54 【问题描述】:

我一直在尝试将整数写入文件(打开模式为 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);

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

四个字

谁能告诉我我做错了什么? 谢谢!

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

【问题讨论】:

长度未初始化。 @omrib:他可能喜欢把垃圾写到文件里;) 【参考方案1】:

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

【讨论】:

所以如果我想以二进制模式写入整数,我应该使用 fwrite,但如果我以文本方式写入文件,我应该使用 fprintf?【参考方案2】:

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

【讨论】:

以上是关于如何将整数写入文件(fprintf 和 fwrite 的区别)的主要内容,如果未能解决你的问题,请参考以下文章

使用 fprintf 调试调用 C DLL 的 MFC 程序

Matlab中,如何将所写的文件保存到一个指定文件夹里?

【C语言】向文件写入东西不能写入换行

如何将MATLAB的输出写入txt文件?

fopen,fprintf,fclose的单线程? [关闭]

什么函数能够将结构化数据写入excel文件中