红联Linux门户
Linux帮助

遇到怪事

发布时间:2011-06-24 20:18:37来源:红联作者:lgcHR
[i=s] 本帖最后由 lgcHR 于 2011-6-26 09:52 编辑 [/i]

先把我的程序贴上来,然后在说明问题
#include
typedef struct student{
char name[10];
int age;
}Student,*StudentPtr;

int main()
{
FILE* fp;
int i;
Student a[2],b[2];
StudentPtr pa,pb;
fp = fopen("stuent.txt","w+");
if( NULL == fp )
{
printf("Can not open the file successfully");
return -1;
}
pa = a;
pb = b;
printf("Please input the data:\n");
for(i = 0;i < 2;i++,pa++)
scanf("%s,%d",pa->name,pa->age);
pa = a;
fwrite(pa,sizeof(Student),2,fp);
rewind(fp);
fread(pb,sizeof(Student),2,fp);
for(i = 0;i < 2;i++,pb++)
printf("%s\t\t%d\n",pb->name,pb->age);
fclose(fp);
return 0;
}
这是我写的一个关于文件操作的程序,我在Ubuntu和RedHat下都运行了一下,竟然会有完全不同的效果。
在Ubuntu下程序能运行通过,可是结果不对。而再RedHat下程序完全不能运行(会发生Segmentation Fault Core Dumped)
当我用GDB调试时GDB提示是在fwrite()处有问题,可我总是不能发现问题在哪。
我贴一些图上来,希望有高手给我一点指导
下面是Ubuntu中运行的过程和结果:
[attach]35046[/attach]
[attach]35047[/attach]
文章评论

共有 3 条评论

  1. lgcHR 于 2011-06-28 08:32:10发表:

    没人来看,只有我自己来顶了,下面是完美运行的程序,通过这个程序确实学到了不少细节方面的东西。
    #include
    #include
    typedef struct student{
    char name[10];
    char age[3];
    }Student,*StudentPtr;
    int main()
    {
    FILE* fp;
    int i;
    Student a[2],b[2];
    StudentPtr pa = a,pb = b;
    fp = fopen("stuent.txt","w+");
    if( NULL == fp )
    {
    printf("Can not open the file successfully");
    return -1;
    }
    printf("Please input the data:\n");
    for(i = 0;i < 2;i++,pa++)
    scanf("%s%s",pa->name,pa->age);
    pa = a;
    fwrite(pa,sizeof(Student),2,fp);
    rewind(fp);
    fread(pb,sizeof(Student),2,fp);
    for(i = 0;i < 2;i++,pb++)
    printf("%s\t%s\n",pb->name,pb->age);
    fclose(fp);
    return 0;
    }

  2. lgcHR 于 2011-06-26 11:28:24发表:

    [i=s] 本帖最后由 lgcHR 于 2011-6-26 11:47 编辑 [/i]

    已经找到问题的原因了,问题在结构体的定义上
    typedef struct student{
    char name[10];
    int age;
    }Student,*StudentPtr;
    age是整形的,所以在写到纯文本文件中的时候需要转换成字符,而这块的工作在程序中没有,所以在写往
    文件中的时候出现类型的不匹配。
    我在VC6.0中运行成功,确实是字符与整形转换之间的问题
    下面是修改过的程序:
    #include
    #include
    typedef struct student{
    char name[10];
    char age[3];
    }Student,*StudentPtr;

    int main()
    {
    FILE* fp;
    int i;
    Student a[2],b[2];
    StudentPtr pa,pb;
    pa = a;
    pb = b;
    fp = fopen("stuent.txt","w+");
    if( NULL == fp )
    {
    printf("Can not open the file successfully");
    return -1;
    }
    printf("Please input the data:\n");
    for(i = 0;i < 2;i++,pa++)
    scanf("%s,%s",pa->name,pa->age);
    pa = a;
    fwrite(pa,sizeof(Student),2,fp);
    rewind(fp);
    fread(pb,sizeof(Student),2,fp);
    for(i = 0;i < 2;i++,pb++)
    printf("%s\t%s\n",pb->name,pb->age);
    fclose(fp);
    return 0;
    }

  3. lgcHR 于 2011-06-26 09:12:56发表:

    咋没人进来看看呢?