C언어 바이너리 파일 출력관련해서 문제가 발생했습니다.
글쓴이: quarterhorse / 작성시간: 금, 2012/12/14 - 6:25오후
불타는 금요일 잘 보내고 계신지요 ㅠㅠ
전 코드때문에 머리가 불타고 있습니다 (으아아아악)
우분투 12.04에 gcc,ddd를 이용해서 C언어 공부를 하고 있는데요,
다름이 아니라 다음과 같은 코드가 있습니다.
#include <stdio.h>
struct student
{
int id;
char name[20];
int score;
};
int main(int argc, char*argv[])
{
struct student record;
FILE *fp;
FILE *fp2;
int c;
fp = fopen("/home/quarterhorse/program/n5/n5.txt","r");
if(fp==NULL)
{
printf("File Open for reading Fail!\n");
return 0;
}
fp2 = fopen("home/quarterhorse/program/n5/n5s.txt","wb"); // 파일을 쓰긴 쓰는데 바이너리로
if(fp==NULL)
{
printf("File Open for Binary Writing Fail!! \n");
return 0;
}
c=fscanf(fp,"%d %s %d",&record.id,record.name,&record.score);
while(c==3)
{
fwrite(&record,sizeof(record),1,fp2);
c=fscanf(fp,"%d %s %d",&record.id,record.name,&record.score);
}
fclose(fp);
fclose(fp2);
return 0;
}fscanf를 이용하여 형식이 있는 파일을 읽을 때 이 형식을 저장할 수 있는 구조체를 선언하고, 이 구조체를 이용하여 이진파일로 저장을 해야 되는데요,
위의 코드들은 얼핏보면 문제가 없어보이는데, 실제로 돌려보면 세그먼트 오류가 뜹니다 (core뭐시기...)
고수님들의 도움이 필요합니다 ㅠㅠ
Forums:


이클립스로 디버깅 잡다가 발견했습니다.
fwrite() at 0xb7e87775
main() at n5.c:52 0x804861b
fwrite() at 0xb7e87775
-> No source available for "fwrite() at 0xb7e87775"
라고 뜨네요... 그런데 리눅스 환경 말고 윈도우 환경에선 경로만 바꿨을시 제대로 동작합니다...
... 가면 갈수록 이유를 모르겠네요 ㅠ
설마...
fp2 = fopen("home/quarterhorse/program/n5/n5s.txt","wb");
home 앞에 root(/) 빼먹어서 그런가요? 소스는 문제 없어 보입니다만... 저거 외에는...
if(fp==NULL) 이 두개네요. 하나는
if(fp==NULL) 이 두개네요.
하나는 if(fp2==NULL) 되어야 할 듯요.
실제로는 home 이 /home 이 되어야 해서 fp2가 할당 받지 못해서 그런듯 합니다.
답변 주신 두분 감사드립니다.
해결했습니다 ㅠㅠ 좋은주말 되세요 ㅠㅠ 정말 감사드립니다
댓글 달기