1

私は C でプログラミングしていますが、次の問題があります。

fopen を使用して、プログラムの exe ファイルのフォルダーに現在保存されている csv ファイルから読み取ろうとしました。

プログラムはデバッグ モードとリリース モードでは正常に動作しますが、Visual Studio 2008 Express Edition で「デバッグなしで開始」でプログラムを実行しようとすると、プログラムが動作を停止し、Windows に次のメッセージが表示されます . プログラムが原因で、プログラムが正常に動作しなくなりました。Windows はプログラムを終了し、解決策がある場合は通知します。".

複数のコンピューターでプログラムを実行しようとしましたが、同じです。

私が提供できるもう 1 つの情報は、ファイルのフル パス (C:....file.csv) を入力すると、問題なく正常に動作するということです。

私はコードを書いていないことを知っていますが、誰かがなぜこれが起こるのか考えてくれることを願っています.

よろしくお願いします。

4

1 に答える 1

4

あなたのプログラムは csv ファイルを見つけられず、fopen()失敗して null ポインターを返します。チェックせずに使用しようとすると、プログラムがクラッシュします (私の推測です)。

fopen()まず、実際にファイルを開くことができるかどうかを確認する必要があります。

FILE* f = fopen("file.csv", "r");
if(f == NULL) {
  /* print some meaningful error */
} else {
  /* use the file */
}

次に、ファイルが存在する同じフォルダーからプログラムを実行することで、問題を解決できる場合があります。私はWindowsの専門家ではありませんが、「.exe」へのリンクを作成すると、そのプロパティに「作業ディレクトリ」などと呼ばれる構成が含まれている可能性があり、ファイルがある場所のパスに設定できます見つかった。

すべてのプロセスには作業ディレクトリがあります。これは通常、プロセスが開始されたディレクトリですが、親プロセスから継承されたり、プログラムで変更されたりする場合があります。ファイルをロードするときにフルパスを指定しない場合、プロセスは現在の作業ディレクトリでファイルを検索します。

于 2012-06-26T21:05:39.337 に答える