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
推荐阅读
- OC为何跌出语言榜前十
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- 白皮书一般是政府发布的正式报告或文件,那么现在物联网、智慧城市等热门领域这么多企业发布的白皮书算咋回事呢
- 关于用phpfsocket 写Post, 模拟http 报文怎样写入要传输的处理数据
- 人民车市|新语言、新起点,捷达VS7 强势入局
- hadoop中的mapreduce链接(mapreduce chaining)怎样避免中间文件的产生
- C语言 指针引用数组的地址问题
- 怎样防止U盘内的文件被复制
- 可不可能利用网盘的秒传功能使用伪造的MD5(或其他信息)值进行文件分享
- windows资源管理器无法浏览部分安卓手机内文件
