C语言fwrite写入文件后为什么出现乱码?

请问为什么写入到文件去会出现以上错误?

这个函数以二进制形式对文件进行操作。

按数据定义结构的写入保持数据结构的长度,对于数值类型,再用文本方式打开时表现为乱码。例如float a=12345.67,写入文件后为4个字节,打开后不是文本表示的8个字节。

写入数据用fprintf(fp,"%s %s %d 这种方式。不是 fscanf(), 另,注意写出时的格式里要有分隔符空格,否则下次读文件时shu,字符串,数字混在一起无法读。允许同时“读写”的文件,要注意读写位置的控制,必要时用到 回绕文件,或fseek。

扩展资料:

返回实际写入的数据项个数count。

说明:这个与文件的打开模式有关,如果是w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。

fseek对此函数有作用,但是fwrite函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE *fp)函数同步。

参考资料来源:百度百科-fwrite

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-11-19
fwrite fread是成块的对二进制文件进行读写,如以二进方式处理文件,文件里的内容除了字符型以asc码显示的你能用记事本打开时能看明白,其它数值类型都是按其在内存里的二进制格式存储的,你现在又以asc码的形式强制解释,当然全时乱码。fwrite写,就用fread读,程序不会出问题,效率还高。
第2个回答  推荐于2017-10-07
这个函数以二进制形式对文件进行操作
按数据定义结构的写入保持数据结构的长度,对于数值类型,再用文本方式打开时表现为
乱码。例如float a=12345.67,写入文件后为4个字节,打开后不是文本表示的8个字节。
第3个回答  2014-01-07
因为写入文件的是二进制数据,所以看上去就是乱码。追问

意思是成块读fread和成块写fwrite都只能是用"rb","wb"不能用"r","w"?是吗?是这样吗?

意思是成块读fread和成块写fwrite都只能是用"rb","wb"不能用"r","w"?是吗?是这样吗?

还是不行呀?

追答

你前面的程序就没错,
"rb", "wb" 这个 "b" 有没有效果都一样,
数据本质上是二进制的,所以人看到就是乱码。
(数据本身是正确的,是那些整数的二进制计算机内部表示,
只不过不是给人看的,是给机器看的。)

追问

那为什么下面这段程序写的会看得见呢?

追答

这是由各种类型的数据在计算机内部的存储格式决定的。

char a[20], b[10]; 之类的字符型数据,用 fwrite() 写入文件后可以直接看到。
但 int x; float y, z; 之类的数值型数据,就无法直接看懂了,
要用 fprintf(fp, "%d, %f, %f\n", x, y, z); 写入文件才能由人直接看懂。

本回答被提问者采纳
第4个回答  2014-01-07
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
注意:这个函数以二进制形式对文件进行操作,不局限于文本文件
返回值:返回实际写入的数据块数目
(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:目标文件指针;
(5)返回实际写入的数据项个数count。

它写入的时候是二进制。所以你是看不了的。追问

意思是成块读fread和成块写fwrite都只能是用"rb","wb"不能用"r","w"?是吗?是这样吗?

还是不行呀?

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网