2 yxts122 YXTS122 于 2016.01.28 21:15 提问

为什么我增加个成员就可以了?好无语
 #include<stdio.h>
#include<stdlib.h>
struct st
{
    char name[4];
    char age[3];
    char tel[9];
}s[3];
void main()
{
    int i,n;
    FILE *fpe; FILE *fpo;
    for(i=0;i<3;i++)
    {
        scanf_s("%s",s[i].name,4);getchar();
        scanf_s("%s",s[i].age,3);getchar();
        scanf_s("%s",s[i].tel,9);getchar();
    }
    fopen_s(&fpo,"e:\\students.txt","w");
    if(fpo==NULL)
    {
        printf("打不开\n");
        exit(0);
    }
    for(i=0;i<3;i++)
    {
        n=fwrite(&s[i],sizeof(struct st),1,fpo);
        if(n!=1)
            printf("file write error");
    }
    fclose(fpo);
    fopen_s(&fpe,"e:\\students.txt","r");
    if(fpe==NULL)
    {
        printf("打不开\n");
        exit(0);
    }
    for(i=0;i<3;i++)
    {
        n=fread(&s[i],sizeof(struct st),1,fpe);
        if(n!=1)
            printf("file read error");
        printf("%-4s%3s%9s\n",s[i].name,s[i].age,s[i].tel);
    }
    fclose(fpe);
    system("pause");
}

图片说明
图片说明

3个回答

91program
91program   Ds   Rxr 2016.01.28 22:39
已采纳

确实是一个奇怪的问题,只增加一个变量就一切 OK 的话,这明显与我们猜的字符串编码无关!
建议你将输入在写入文件前,先输出确认一下:主要的目的是看看有没有什么越界、或者其它可能的情况出现。

91program
91program 回复YXTS122: 我有一篇关于结构体的文章,你可以看看:http://blog.csdn.net/91program/article/details/22818865结构本实际占的空间,确实存在你所说的实际大小,与定义大小不相符合的问题,是偶数字节是必须的。然后真正的大小是多少,你可以看我的 博客文章 中的说明。
2 年多之前 回复
YXTS122
YXTS122 回复91program:我发现结构体必须是奇数就没事,是偶数的话,记事本里就会出现乱码
2 年多之前 回复
YXTS122
YXTS122 回复91program:我发现结构体的大小必须是奇数就没事,如果是偶数的话,记事本中就会出现乱码,什么道理?
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2016.01.28 21:31

之前回答你了,因为windows xp的记事本没有办法直接识别编码——但是情况比较复杂的是,它在没有unicode编码头的文件上会实现猜测编码,根据文本的内容,这种猜测有时候会出问题。

以前网上流传一个段子,说的是记事本输入联通,保存,出来的是乱码,其实就是这个原理。

zhao_zhi
zhao_zhi   2016.01.28 22:41

与Windows记事本的编码方式有关,如果使用UE打开,则截图如下:
图片说明,写入的数据没有问题,只是显示失败罢了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
我开始看设计模式啦
这几天,真是郁闷死我了,老师天天在我们面前讲什么设计模式之类的,害的我没有听明白。 老师说,你们现在就开始看设计模式还来的及,为什么呢?因为我们还有6个月左右的时间吧。好,老师,我相信你。同时也给一个相信的机会,也是给自己一个学习的机会。于是乎,我狠下了心,同时心也流了血,花了69RMB(原价:88RMB)买了那本一千多页的《JAVA与模式》。买了就得看,不看就不要买哦。 其实设计模式
给鼠标右键增加个复制移动功能
给鼠标右键增加个复制移动功能给鼠标右键增加个复制移动功能给鼠标右键增加个复制移动功能
安装及破解
安装后在桌面会增加个导航快捷方式,只要删掉就可以了,没有别的影响。
SpringBoot 事务的应用
SpringBoot 事务的应用今天学习了下关于SpringBoot中事务的应用,记录一下。事务的概念呀四个特性呀这里就不说了呀。简单来说:操作要么全做,要么全不做。还是以银行转账为例,A转账到B:必须是A账户扣钱成功且B账户到账成功,而不允许出现A账户扣钱成功呀B账户没有收到钱等等,这都是不允许出现的,如果发生在你身上,必须要去投诉,是吧。简单的应用同样,本文在上篇博文中的Demo基础上做为例子来
提问的智慧FAQ得规则
很实用的一本书。我没办法阿,为什么一定要20个字阿,我真的很无语了,你传上去也没事吧?
WINDOWS安装MAC安装助手
windwos下安装MAC的必备工具,为什么老要我的简介大于20个字呢,我很无语,囧,
a^b(快速幂取模)
http://www.tyvj.cn/Problem_Show.aspx?id=1118 a^b From Admin描述 Description 求a^b  由于结果可能很大,我们现在只需要知道这个值 mod 1012就可以了(为什么是1012?我的生日) a b 输入格式 InputFormat 第一行两个数 a b 输出格式 OutputFormat
c#访问类的私有成员
<br />转自 http://oulehui.blog.163.com/blog/static/79614698201122411454722/<br />首先我必须承认访问一个类的私有成员不是什么好做法。大家也都知道私有成员在外部是不能被访问的。而一个类中会存在很多私有成员:如私有字段、私有属性、私有方法。对于私有成员访问,可以套用下面这种非常好的方式去解决。private string name;<br />public string Name<br />{<br />    get<br />   
很努力,却始终没有别人混的好---我觉得是“认真”的问题
【感悟】你很努力,却还是没有别人优秀? 学习从来都不是看谁学的时间长谁就优秀,学习如此,生活亦如此。看你是否真的努力是看你付出的有效时间是多少,而不是花多少时间。 学而不思则罔,思而不学则殆。爱因斯坦也说过,成功=勤奋工作+正确方法+少说废话。所以当你觉得自己很努力了,却还没有别人优秀的时候,那么请你停下脚步,好好的回忆一下你是否存在以下几点误区。 1.你看书的时候会想这
CANON IP1000
清零啊,那么烦,有史以来注册最麻烦的一个网站,让我真的好无语