8

ファイルを開いてそこからデータを読み取る単純な C プログラムに取り組んでいます。コンパイル エラーはありませんが、特定のファイルに対してプログラムを実行すると、"Segmentation Fault: code dumped" エラーが発生します。コードの一番上に print ステートメントを挿入しましたが、実行されません。まだ何もしていないときにセグメンテーション違反が発生する可能性はありますか?

#include <stdio.h>


int main(int argc, char **argv)
{
    printf("%s", "Made it to here!");
FILE *fp;   
char input[100];
fp = fopen(argv[1], "r+b");
fgets(input, sizeof(input), fp);
printf("%s", input);
fclose(fp);
return(0);

}

これは、それ自体のテキスト バージョンで実行すると機能し、最初の行が出力されます。しかし、別のファイル texttest.vmf で実行すると、セグメンテーション エラーが発生し、最初の出力が実行されません。VMF はバルブ マップ ファイルですが、標準のテキスト形式です。このファイルのサイズは約 3.7 KB です。何か案は?

4

2 に答える 2

22

printfの呼び出しprintfが成功する前にコードが失敗する必要はありませんが、コンソールへの出力がバッファリングされているため、出力が画面に書き込まれる前にプログラムがクラッシュした可能性があります。

出力文字列に追加\nすると、コンソールバッファがフラッシュされます。sでデバッグする場合は、常にフォーマット文字列の最後にprintf追加する必要があります。\n

于 2012-11-21T04:02:57.043 に答える
1

通話fopenが失敗している可能性があります。を使用する前に、戻り値を確認してみてくださいfp

FILE *fp;   
char input[100];
if((fp = fopen(argv[1], "r+b") == NULL) {
  fprintf(stderr, "ERROR: Cannot open file.\n");
  return 1;
}

#include <stdlib.h>NULL マクロを使用する場合は必ず追加してください。

于 2012-11-21T04:07:52.440 に答える