2017-11-18 16 views
-1

파일에 쓰는 Linux에 간단한 코드를 작성하고 있습니다. 그 파일은 특정 경로 (실행 파일이 위치한 경로가 아님)에 저장됩니다. 문제는 코드를 실행할 때 프로그램이 세그먼트 화 오류 (코어 덤프)로 끝나는 것입니다.C++ fopen fwrite 특정 경로로 선택하십시오.

여기에 있습니다 코드 : 프로그램의 EXE가에 있음을

#include <stdio.h> 

int main() 
{ 
    FILE * pFile; 
    char buffer[] = { 'x' , 'y' , 'z' }; 
    pFile = fopen ("/home/medwajih/Desktop/bufferfile/buffer.txt", "wb"); 
    fwrite (buffer , sizeof(char), sizeof(buffer), pFile); 
    fclose (pFile); 
    return 0; 
} 

참고 "/ 홈/medwajih/데스크탑 /"나는이 buffer.txt 파일을 생성 할 위치는 "/ 홈/medwajih/데스크탑/bufferfile입니다/"

감사합니다.

+1

'fopen()'의 결과를 확인하지 마십시오. 'NULL'이 아닌게 확실합니까? – user0042

+0

'/ home/medwajih/Desktop/bufferfile' 폴더가 존재합니까? 쓰기 권한이 취소되지 않았습니까? 파일이 다른 프로세스에 의해 잠겨 있지 않습니까? –

+0

안녕하세요, 실행 파일이 바탕 화면에 있고 폴더 "bufferfile"도 바탕 화면에 있기 때문에 잘 작동하지만, 예를 들어 "/home/medwajih/Downloads/bufferfile/buffer.txt"와 같은 다른 경로를 사용하면 코드가 종료됩니다. 세분화 오류가있는 경우 –

답변

0

fopen 디렉토리가 없거나 파일이 있지만 대체 할 수없는 권한이있는 경우 pFile은 NULL로 설정됩니다.

사용하려고하면 정의되지 않은 동작입니다.

당신은 일반적으로 체크 등과 같은 그들이 나중에 문제가 발생하지 않도록하기 위해 실패 할 수 있습니다 모든 통화가해야 문제

pFile = fopen ("/home/medwajih/Desktop/bufferfile/buffer.txt", "wb"); 
if (pFile == NULL) { 
    fprintf (stderr, "Could not create file\n"); 
    return 1; 
} 

경우 실제로 디렉토리가 존재하지 않습니다 사전에 mkdir으로 전화 할 수 있습니다. 그리고 물론 그 반환 값을 확인하십시오 :-)

그 밖의 것이면 (실제로 무엇인지 확인하는 데 충분한 정보가 없습니다), 다른 방법을 찾아서 문제.

+0

안녕하세요, 디렉토리 버퍼 파일이 존재합니다. –