c语言向文件写入名字和成绩组成的结构体为啥只有成绩出现了烫

放码过来。——————————问题更新——————————修正了代码中个别错误后,作出解答。1. 出现烫的原因(1)“烫”这个字在GB2312编码中是CCCC(2)你现在工程用的是Debug编译模式。这种模式下编译器会生成代码,在每个函数代码执行之前会将本地临时变量所要用到的栈内存空间的每一个字节赋值为CC。(3)你代码中结构体name给了10字节,但是score整型占4个字节。这时候要做内存4字节对齐(即每个变量的地址均可被4整队),name的10字节后面会填上2个字节补齐,已保证score的位置在第12字节。你可以printf("%d\, sizeof(student))看下student结构的长度,一定是16。(4)在main函数中初始化的那句中只会为结构体中有效的变量赋值,因此附加的那两个字节初始化后仍为CCCC。(5)你使用二进制模式将结构体写入文件,再用记事本打开,你就看到了大名鼎鼎的“烫”了,实际上是CCCC在GB2312下对应的汉字,如果你换用其它语言的操作系统看到的就不是这个汉字了。避免“烫”出现的几个办法a. 调整name数组长度可被4整除。b. 在struct student前加入一行#pragma pack(1)关闭4字节对齐。2. 数字不出现的原因(1)你用二进制模式将结构体写入的文件,那么文件中数字也以二进制格式而不是字符串格式保存。(2)其实你已经看到了数字,只是没正确意识到他们。:在ASCII码中用3A表示,转换成10进制就是58。同理@M?U四个字符分别表示64, 77, 55, 85。让数字正确显示的办法a. 弃用二进制文件IO,改为用fprintf。b. 结构体中score不使用int,而是同样用字符数组保存。通过sprintf和sscanf在字符和整数间转换。
■网友
烫烫烫烫塌。2333333


    推荐阅读