C语言文件输出时,输入数据后为什么会出现乱码

2025-06-27 17:49:09
推荐回答(4个)
回答1:

if(fwrite(&stud[i],sizeof(struct
studentType),1,fp)!=1)
简单看了下,这行有问题,往文件里写的时候是把一个字符串写进去,stud[i]是一个struct,强行把它序列化的话,内存中的存储不是连续的,这样写就会写入一些没用的数据,导致出错。考虑一下怎么把struct序列化,再看看struct的中的字节是怎么对齐的,建议而已

回答2:

先确认一下文件是二进制存的吗?如果是,用记事本打开它,应该是看不到数字的。不是说在记事本里输入字符1
2
3
4,然后保存成number.dat,程序就能正确读取的。
二进制读取的时候fopen要写成
fp=fopen("number.dat","rb");rb表示binary:二进制读写。

回答3:

fwrite(&stud[i],sizeof(struct
studentType),1,fp)
你这种写入方式是直接将这个数据的内存原封不动的拷贝到文件当中。
在C语言中,内存中的结构体的存储并不是所有数据连续的。
你可以在网络上搜索一下结构体的对齐原则。
这种原则是C语言中,结构体存储结构的原理。
如果你希望能更好的理解。

回答4:

fwrite函数保存数据时整型数据将会保存为对应的ASCII字符
比如48就会被保存为‘0’