当害怕构造时,c 中的错误输出
when fread to struct, wrong output in c
实际上代码是土耳其语,但我翻译了一些词,也许对您有所帮助。
结构:
typedef struct
{
char name[100];
char surname[100];
char idNo[11];
char tel[11];
char address[200];
char email[100];
}personel;
代码:
void personelListele(){
FILE *pdosya;
personel personelBilgi;
pdosya = fopen("personel.txt","rb");
if(pdosya==NULL){
printf("personel.txt dosyası açılamadı");
exit(1);
}
int c;
while(c!=0)
{
c = fread(&personelBilgi,sizeof(personel),1,pdosya);
if(c!=0){
printf("Name= %s\n",personelBilgi.name);
printf("Surname= %s\n",personelBilgi.surname);
printf("id = %s\n",personelBilgi.idNo);
printf("Tel = %s\n",personelBilgi.tel);
printf("Address = %s\n",personelBilgi.addres);
printf("Email = %s\n",personelBilgi.email);
}
}
}
输入:
Name:Guven
Surname:Yildiz
id No:12312312312
Tel No:98798798798
Email:mail@mail.com
Address:somewhere
输出:
Name = Guven
Surname = Yildiz
id No = 1231231231298798798798mail@mail.com
Tel No = 98798798798mail@mail.com
Email = mail@mail.com
Address = somewhere
idNo 输出混合了 idno、telno 和 mail。 telno 也是如此。我不知道为什么会这样。我试过换地方,但没用。
感谢您的帮助。
鉴于此输入:
id No:12312312312
是11个字符,你溢出了
char idNo[11];
因为您不允许 space 作为终止 '[=12=]'
字符添加到字符串。
在这种情况下,您可以判断发生了溢出,因为您在非空终止的字符数组上将变量打印为 c 字符串。在这种情况下,行为是未定义的,但由于您已将数据读入 struct
,因此 printf
调用会一直在内存中读取,直到它找到 '[=12=]'
恰好在结构的下一个字符数组。因此,可识别的数字。
实际上代码是土耳其语,但我翻译了一些词,也许对您有所帮助。
结构:
typedef struct
{
char name[100];
char surname[100];
char idNo[11];
char tel[11];
char address[200];
char email[100];
}personel;
代码:
void personelListele(){
FILE *pdosya;
personel personelBilgi;
pdosya = fopen("personel.txt","rb");
if(pdosya==NULL){
printf("personel.txt dosyası açılamadı");
exit(1);
}
int c;
while(c!=0)
{
c = fread(&personelBilgi,sizeof(personel),1,pdosya);
if(c!=0){
printf("Name= %s\n",personelBilgi.name);
printf("Surname= %s\n",personelBilgi.surname);
printf("id = %s\n",personelBilgi.idNo);
printf("Tel = %s\n",personelBilgi.tel);
printf("Address = %s\n",personelBilgi.addres);
printf("Email = %s\n",personelBilgi.email);
}
}
}
输入:
Name:Guven
Surname:Yildiz
id No:12312312312
Tel No:98798798798
Email:mail@mail.com
Address:somewhere
输出:
Name = Guven
Surname = Yildiz
id No = 1231231231298798798798mail@mail.com
Tel No = 98798798798mail@mail.com
Email = mail@mail.com
Address = somewhere
idNo 输出混合了 idno、telno 和 mail。 telno 也是如此。我不知道为什么会这样。我试过换地方,但没用。
感谢您的帮助。
鉴于此输入:
id No:12312312312
是11个字符,你溢出了
char idNo[11];
因为您不允许 space 作为终止 '[=12=]'
字符添加到字符串。
在这种情况下,您可以判断发生了溢出,因为您在非空终止的字符数组上将变量打印为 c 字符串。在这种情况下,行为是未定义的,但由于您已将数据读入 struct
,因此 printf
调用会一直在内存中读取,直到它找到 '[=12=]'
恰好在结构的下一个字符数组。因此,可识别的数字。