私はfgetsからセグメンテーションを取得していますが、ときどきのみです。他の人のコードですが、私はmakefileを理解できませんので、printf文でデバッグしています...これをmain関数の2つの部分に置きます:(私は変数fと行を一度しか作成しませんが、 fopenのと両方の時間をファイルをfcloseは)私に二つの異なる出力を与えるsegfault on fgets ...時々
FILE *f = NULL;
char line[1000];
if ((f=fopen(filename,"r+"))==NULL)
{
printf("Error opening file\n");
f=0;//...handle error... //(usually just call abort() or return -1
}
//f = rfopen(fname, "r+");
printf("f from eval_args: %d, filename %s\n",f,filename);
printf("trying to read from file...\n");
printf("%s\n",fgets(line, sizeof (line), f));
printf("...succeeded\n");
fclose(f);
:。
f from eval_args: 4609600, filename /correct/path/to/file
trying to read from file...
100
...succeeded
f prior to entering density profile: 4609600, filename /correct/path/to/file
trying to read from file...
Segmentation fault (core dumped)
私は '内の収まらないファイルが正しく開かれ、複数の文字を読ん防ぐされていることを確認してくださいライン'。私は1つのフォーラムで、ファイル名が49文字を超えてはならないことを知りました...しかし、a)それは奇妙な制限であり、b)なぜ最初に動作するのですか?
他に何が確認できるか知っていますか?
ないのprintf()印刷 '(ヌル)' NULL文字列に遭遇するとしていますか? –
問題を再現する小さなコンパイル可能なプログラムを投稿できますか? – hmjd
まず、 'fgets'を別の文として置いてください。デバッガを使って、エラーを探して調べるのを助けてください。 –