2010-04-23 3 views
3

쓰기에 fwrite :나는이 기능을 사용하여 파일에 단어를 쓰기 위해 노력하고있어 정수

extern void write_int(FILE * out, int num) { 
    fwrite(&num,sizeof(int),1, out); 
    if(ferror(out)){ 
     perror(__func__); 
     exit(EXIT_FAILURE); 
    } 
} 

그러나 나는 그것이에 fwrite를 실행하려고 할 때마다 세그먼트 오류를 ​​얻을. 나는 fwrite (3)의 맨 페이지를 보았고 제대로 사용했다고 느낀다. 내가 놓친 것이 있는가?

+0

플랫폼/컴파일러는 무엇입니까? 정렬 문제는 중요 할 수 있습니다. – abelenky

+2

'out'이'NULL'이 아닌지 확인하십시오. 나머지는 괜찮습니다. –

+0

이 코드를 테스트했을 때 나는 "test"라는 테스트 파일에 쓰기를 결정했다. 테스트 파일은 내 테스트 프로그램의 바이너리 이름이기도하여 나에게 segfault를 주었다. >. <그래서 함수 자체는 괜찮습니다. N 1.1과 다른 사람들이 제안한 것처럼 당신이 전달하는 것이 유효한지 확인하십시오. –

답변

5

대신이 시도?

+1

하하. 승인. 감사. 그러나 이제는 "내가 너를 보았을 것이다."라고 표시됩니다. * 자기 마른 세수 * 이는 일이 이번이 처음도 아니고 그것이 마지막이 될 것입니다 ... 내가이 시스템에 사용됩니다 라이브러리를 쓰고 있기 때문에이 기능은 통근했다 프로그래밍 학급 다음 분기 ... – user149100

+0

심령 디버깅의 효과에 lol – Joshua

+0

'FILE *'이'NULL'이면, 그것은 보통 당신이 그것을 열지 않았거나 열지 못했음을 의미합니다. man 페이지에서'fopen' (아마도 여러분이 사용하고있는 것)을 확인하십시오. – tylerl

0

플랫폼/컴파일러는 무엇입니까? 정렬 문제는 중요 할 수 있습니다.

파일에 다른 파일을 쓸 수 있습니까? 파일이 제대로 열리지 않을 수도 있습니다.

void write_int(FILE * out, int num) { 
    if (NULL==out) { 
     fprintf(stderr, "I bet you saw THAT coming.\n"); 
     exit(EXIT_FAILURE); 
    } 
    fwrite(&num,sizeof(int),1, out); 
    if(ferror(out)){ 
     perror(__func__); 
     exit(EXIT_FAILURE); 
    } 
} 

을 왜 원래의 기능 extern했다 :

+0

힌트 : fwrite는 void *를 취해 char *로 변환합니다. 그래서 align = 문제가되지 않습니다. – Joshua

0

파일 핸들이 유효합니까? "w"로 fopen() 했습니까? fwrite()는 그렇지 않은 경우 segfault합니다.

함수 자체는 실제로 아무 것도하지 않으므로 분명히 fwrite 호출이 문제입니다. 인수를 조사하십시오.