请问为什么写入到文件去会出现以上错误?
这个函数以二进制形式对文件进行操作。
按数据定义结构的写入保持数据结构的长度,对于数值类型,再用文本方式打开时表现为乱码。例如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
按数据定义结构的写入保持数据结构的长度,对于数值类型,再用文本方式打开时表现为
乱码。例如float a=12345.67,写入文件后为4个字节,打开后不是文本表示的8个字节。
意思是成块读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); 写入文件才能由人直接看懂。
注意:这个函数以二进制形式对文件进行操作,不局限于文本文件
返回值:返回实际写入的数据块数目
(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:目标文件指针;
(5)返回实际写入的数据项个数count。
它写入的时候是二进制。所以你是看不了的。追问
意思是成块读fread和成块写fwrite都只能是用"rb","wb"不能用"r","w"?是吗?是这样吗?
还是不行呀?