마지막 레코드를 두 번 읽는 동안 이진 파일 읽기에 약간의 문제가 있습니다. 4 개의 레코드를 입력했지만 5 개의 레코드가 인쇄되고 마지막 레코드는 항상 두 번 인쇄됩니다.C 바이너리 파일 읽기
int main()
{
FILE *fp;
fp = fopen("file" , "a+");
struct clientsData {int num1; int num2; char str[20]; };
if (getchar()=='w')
{
int n1,n2;
char name[20];
scanf("%d",&n1);
scanf("%d",&n2);
scanf("%s",name);
struct clientsData client;
client.num1=n1;
client.num2=n2;
strncpy(client.str,name, 20);
fwrite(&client , 1, sizeof(struct clientsData) , fp);
}
else
{
while (!feof(fp))
{
struct clientsData client;
fread(&client, 1, sizeof(struct clientsData) , fp);
printf("%d\t%d\t%s\n",client.num1, client.num2, client.str);
}
}
fclose(fp);
return(0);
}
출력 :
1 1 asd
2 3 asd
23 90 player
23 23 marin
23 23 marin
나는 eof 문자를 찾았을 때 한 번 더 루프를 찾거나 틀렸는가? –
코드가'name'을 읽는 방법에 문제가있다. 'strncpy (client.str, name, 20);'어느 쪽도 결과가'\\ 0 '으로 끝나는 것을 보장하지 않습니다. 'scanf ("% 19s", name); ' – chux
감사합니다 chux! –