0

コードに問題があります。ファイルに保存されたいくつかの以前のコマンドを読み込んで、後で使用するために配列に配置しようとしています。

これが私の関連するコードです:

    if( (pastHist = fopen("history.txt", "r+")) == NULL)
  {
pastHist = fopen("history.txt", "w+");
  }  
else
  {

printf("%s", "INSIDE the else!");
pastHist = fopen("history.txt", "r+");
fscanf(pastHist, "%s", fstring);
while (fstring != NULL)
  {
    printf("%s %s", "the read in string is: ", fstring);
    strcpy(cmndLine[cmndIndex], fstring);
    strcpy(cmndLinecpy[cmndIndex], fstring);
    cmndIndex++;
    cmndNum++;
    fscanf(pastHist, "%s", fstring);
  }
  }

これで、コードはファイルに正常に書き込みます。(執筆部分は別の場所で開催されます)。以前に書き込んだファイルから読み取った場合、ファイルには次のように書かれていました:

ls rmdir 天使の歴史

次に、この印刷ステートメントを使用して、読んでいるものを再確認します...「INSIDE the else! 文字列の読み取りは: ls文字列の読み取りは: rmdir文字列の読み取りは: angel文字列の読み取りは: historythe文字列の読み取り: history文字列の読み取り: history

...そして、最後に読み込まれたのは履歴であると 100 万回繰り返します。これはなぜですか?私もwhile条件で試しました

while(getchar() != EOF)

しかし、それは私に同じことを与えました。

助けてください。ありがとう。

4

1 に答える 1

1

fstringへの呼び出しによって NULL に設定することはできませんfscanf。確認したいのは の戻り値ですfscanf

あなたのgetchar()ループも同様に役に立ちません.ファイルからではなく、標準入力から読み取っています。

于 2013-10-07T23:00:51.840 に答える