重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1、因为你写文件的时候使用了fwrite fread, fwrite - binary stream input/output而fread,fwrite是以二进制的方式读写的,所以保存的文件是乱码。
成都创新互联总部坐落于成都市区,致力网站建设服务有网站制作、成都网站设计、网络营销策划、网页设计、网站维护、公众号搭建、重庆小程序开发公司、软件开发等为企业提供一整套的信息化建设解决方案。创造真正意义上的网站建设,为互联网品牌在互动行销领域创造价值而不懈努力!
2、结构体类型写入文件,那么保存的必然是二进制数据,直接看文件肯定是乱码的。如果想文件内容是直接可看的,那么不要直接存储结构体,应该自己设计这个文件的文本格式,按文本方式存储数据。
3、先确认一下文件是二进制存的吗?如果是,用记事本打开它,应该是看不到数字的。不是说在记事本里输入字符1 2 3 4,然后保存成number.dat,程序就能正确读取的。
4、全部调用 gets 函数,一次回车输入一行,而不是全部用 scanf来做。至于乱码,是因为最后一个字符串变量没有初始化,于是后面没有\0,程序把内存中的乱码写进文件,直到偶然遇到\0为之。这样的程序是不稳定的。
5、这里每次读入4个字节,而因为是这个文件里保存的都是字符,每个字符占一个字节,所以实际上第一次是把 10 _ 0 _ 四个字符,拼成了一个4字节的整数,并且保存在了a[0]里面。
6、你写入文件的又不是字符串, 当然是看起来是乱码。可以先sprintf(str,%f,i),转成字符串,将str用fwrite写入文件。但这样再去读这些文件,需要再次将字符串转换成数字。
这是C语言习惯,务必养成!\x0d\x0a\0是字符串结束符,每当解释器看到这\0才会认为字符串终止,而你的程序明显没有字符串结束符,所以连同垃圾内存一起读出来了。“烫烫。”等就是垃圾内存。
文件编码问题,如果是VC,person.txt要用ASCII或GBK编码。
汉字乱码是因为缓冲区有字符,需要用fflush(stdin);来清空键盘缓冲区,使用getch等都是治标不治本的办法,可以多学习一下fflush的使用,对于大批量的手动输入,很用。
你这个乱码,你的文件里,学号长度为10个字节,所以你定义学号这个变量时,必须定义11个字节的长度,因为字符串的变量,必须要有一个\0作为结束,不然的话,显示的时候,没有结束符就会接着往下显示,就会有乱码出现。
=1) 简单看了下,这行有问题,往文件里写的时候是把一个字符串写进去,stud[i]是一个struct,强行把它序列化的话,内存中的存储不是连续的,这样写就会写入一些没用的数据,导致出错。
你这个乱码,你的文件里,学号长度为10个字节,所以你定义学号这个变量时,必须定义11个字节的长度,因为字符串的变量,必须要有一个\0作为结束,不然的话,显示的时候,没有结束符就会接着往下显示,就会有乱码出现。
k不应该是按位赋值给key的吗?为什么把key[i]都赋值为k 总结:把指针赋值给变量,会输出地址,printf会把地址强转为十进制输出;key数组中每一个数字都被赋值为k,然后输出,就会输出一长串数字。
p1-bthplc:(未初始化,数据不可知)由于p1-bthplc未初始化,所以会有乱码出现。建议你采用三个数据分开输入的方式解决这个问题。
如果输出的是字符串,则是没有正确设置串尾符\0(或是正确的串尾符被破坏掉了)的缘故。