2017-11-18 5 views
-1

ファイルに書き込むシンプルなコードをLinuxで書いています。そのファイルは特定のパス(実行ファイルがあるパスと同じではありません)に格納されます。コードを実行すると、プログラムはセグメンテーションフォルト(コアダンプ)で終了します。C++ fopen特定のパスを指定してfwriteを選択します

ここは私ですコード:プログラムのexeファイルは「/ホーム/ medwajih /デスクトップ/」にあると私はbuffer.txtファイルを作成したい場所は「/ホーム/ medwajih /デスクトップ/ bufferfileであること

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

注意/ "

ありがとうございます。

+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

こんにちは、ディレクトリbufferfileは既存です –

関連する問題