구조체 파일복사에 관하여 이 소스가 맞는지 궁금합니다.
새우깡
질문 제목 : 구조체 파일복사에 관하여 이 소스가 맞는지 궁금합니다.구조체에서의 파일 입출력질문 내용 :
#includestdio.h
struct fren
{
char name[10];
char sex[7];
int age;
};
struct fren2
{
char name[10];
char sex[7];
int age;
};
int main(void)
{
file *fp1, *fp2;
struct fren myfren1[10];
struct fren2 myfren2[10];
int i=0, ref;
fp1=fopen(friend.bin, wb);
printf(이름, 성별, 나이순으로 입력\n);
for(i=0; i3; i++){
scanf(%s %s %d, myfren1[i].name, &(myfren1[i].sex), &(myfren1[i].age));
fwrite((void*)&myfren1, sizeof(myfren1), 1, fp1);
}fclose(fp1);
printf(\n\n\n\n);
i=0;
fp2 = fopen(friend.bin, rb);
while(1){
ref = fread((void*)&myfren2 ,sizeof(myfren2), 1, fp2);
if(ref sizeof(myfren2)){
if(feof(fp2) != 0){
printf(%s %s %d\n, myfren2[i].name, myfren2[i].sex, myfren2[i].age);
break;
}
}
printf(%s %s %d\n, myfren2[i].name, myfren2[i].sex, myfren2[i].age);
i++;
}fclose(fp2);
}
위 소스인데요. 이게 마지막에 출려되면 알수없는 문자들도 같이 출력되더라구요.
혹시나 구조체를 입출력 한다면 저런 방식이 맞는지 궁금합니다.
-
빈길
제가 배울때는 fread((void*)&myfren2 ,sizeof(myfren2), 1, fp2); 하면
sizeof(myfren2) * 1 바이트만큼 한다고 들었거든요...
즉 구조체가 총 6byte 되기 때문에 구조체 한개라는 의미를 두게 되었습니다.
혹시나 제가 틀린건지 궁금합니다.. ㅠㅠ -
뿡뿡
fread((void*)&myfren2 ,sizeof(myfren2), 1, fp2);
fread 함수는 읽어들인 바이트 크기를 되돌리는 것이 아니라,
읽어들인 아이템 수를 되돌려줍니다.
sizeof(...) 랑 비교하는 것은 의미가 없어 보입니다.