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가 할당 받지 못해서 그런듯 합니다.
답변 주신 두분 감사드립니다.
해결했습니다 ㅠㅠ 좋은주말 되세요 ㅠㅠ 정말 감사드립니다
댓글 달기