1


0

Mac OS Xでファイルを開く

Mac OS XでC ++を使用してテキストファイルを開こうとしていますが、常にBusエラーが発生します。

ファイルをどこに置くかは気にしません。 読むだけです。 アドレスを間違って書いていますか? またはそのバスエラーには別の理由がありますか?

FILE *dic;
dic = fopen("DICT","rb");

dic = fopen("./DICT","rb");

dic = fopen("~/DICT","rb");

dic = fopen("~//DICT","rb");

2 回答


3


少し明確にすると、Cコード(C ++ではありません!)の問題は、 `fopen()`が `NULL`を返すことです。 詳細なエラーを報告することで、問題が実際に何であるかを確認できます。

if( (dic = fopen("DICT", "rb") == NULL ) {
    fprintf(stderr, "%s\n", perror("ERROR:"));
    exit(1);
}

`fopen()`がユーザーのデスクトップでファイルを見つけられず、コードを複数のプラットフォームで動作させたい場合、 `fopen()`で使用するユーザーのデスクトップディレクトリを取得する関数を定義できます。 何かのようなもの

char* user_desktop(char* buf, size_t len)
{
    const char* const DESKTOP_DIR =
#ifdef PC
    "C:\\Documents and Settings\\Pooya\\Desktop\\"
#elif defined(OSX)
    "/Users/Pooya/Desktop/"
#elif defined(LINUX)
    "/home/users/pooya/Desktop/"
// fail to compile if no OS specified ...
#endif
    return strncpy(buf, DESKTOP_DIR, len);
}

おそらく、各オペレーティングシステムのデスクトップのパスを取得する、より堅牢な方法を検討する必要があります。 ほとんどのオペレーティングシステムにはこのためのAPIがありますので、研究も行ってください。 さまざまなプラットフォームの動作を分割するより堅牢な方法もあります。それについて調べるか、それについて別の質問を開くことができます。 コードをコンパイルするプラットフォームに関係なく、適切なデスクトップパスを返す関数を作成するというアイデアを表明したかっただけです。


0


このコードは正しいです! 実行可能ファイルが置かれているディレクトリに注意してください。 確かに、実行のディレクトリはあなたが期待しているものと同じではありません( `.c`ファイルのディレクトリでしょう?)。

IDEからアプリを実行していると思います。 これはXcodeの共通事項であり、プロジェクトファイルがある場所とは別の場所にexecをマウントします。このような場所は、IDEから実行するかどうかにかかわらず、プログラムの実行時に考慮されます。

読み取りたいファイルをアプリケーションの場所に移動するだけで、適切に機能します。