先把我的程序贴上来,然后在说明问题
#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]
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;
}
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;
}
lgcHR 于 2011-06-26 09:12:56发表:
咋没人进来看看呢?