1

プログラムへのファイルリダイレクトに問題があります。testというMakefileがあり、入力としてテキストファイルをリダイレクトしたいと思います。たとえば、私はしたい:

テスト<file.txt

実行可能ファイルへの入力として。ただし、file.txtの内容を読み込もうとすると、セグメンテーション違反が発生し続けます。これが私の試みです:

int main(int argc, char* argv[])
{
  FILE *a;
  int count;
  a = fopen(argv[1], "r");
  for(n = 0; ; n++)
  {
    count = fgetc(a); // <- here is where my program segfaults
    if(feof(a))
      break;
  }
  return 0;
}

なぜこれが起こるのか誰かが知っているだろうか?

4

2 に答える 2

2

これは、リダイレクトがシェルによって処理され、引数として渡されないためです。リダイレクトが使用される場合、ファイルはstdin.

関数の結果を常に確認する必要があります。この場合、ファイル名を指定fopenして呼び出そうとすると、セグメンテーション違反が発生します。NULLNULL

于 2012-11-28T09:00:51.173 に答える
0

シェルは「<」と「file.txt」を引数としてプログラムに渡さないため、argv[1]ランダムなガベージが返されます。

から読み取るのではなく、自動的に使用可能になり開かれるaから読み取る必要があります。stdin

int main(int argc, char* argv[])
{
  int count;
  for(n = 0; ; n++)
  {
    count = fgetc(stdin); 
    if(feof(stdin))
      break;
  }
  return 0;
}
于 2012-11-28T09:02:15.883 に答える