2017-11-18 178 views
-1

我正在寫一個寫入文件的Linux上的簡單代碼。該文件將存儲在特定的路徑(不是可執行文件所在的路徑)。問題是當我執行代碼時,程序終止於段錯誤(核心轉儲)C++ fopen與我選擇的特定路徑的fwrite

這是我的代碼:

#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; 
} 

需要注意的是該程序的EXE是「/家/ medwajih /桌面/」,並在那裏我想創建buffer.txt文件的位置是「/家/ medwajih /桌面/ bufferfile /「

謝謝。

+1

你從不檢查'fopen()'的結果。你確定它不是'NULL'嗎? – user0042

+0

文件夾'/ home/medwajih/Desktop/bufferfile'是否存在?寫入權限還沒有被撤銷?該文件沒有被另一個進程鎖定? –

+0

你好,它現在工作正常,因爲可執行文件在桌面和文件夾「bufferfile」也在桌面上,但是當我使用另一個路徑例如「/home/medwajih/Downloads/bufferfile/buffer.txt」代碼終止分段錯誤 –

回答

0

如果fopen失敗(例如/home/medwajih/Desktop/bufferfile目錄不存在,或者該文件存在,但具有不允許替換的權限),則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

hello,目錄bufferfile已存在 –