C 正在从文件扫描,最后一个字符串正在重复

C 正在从文件扫描,最后一个字符串正在重复,c,file,scanf,C,File,Scanf,我的代码有点问题。我试图读入保存到文件中的一些以前的命令,并将它们放在数组中供以后使用 以下是我的相关代码: if( (pastHist = fopen("history.txt", "r+")) == NULL) { pastHist = fopen("history.txt", "w+"); } else { printf("%s", "INSIDE the else!"); pastHist = fopen("history.txt", "r+"); fscanf

我的代码有点问题。我试图读入保存到文件中的一些以前的命令,并将它们放在数组中供以后使用

以下是我的相关代码:

    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天使 历史

然后我用这个打印语句再次检查我读的内容。。。它打印出来了 “在else内!读入字符串是:1读入字符串是:rmdir读入字符串是:Angel读入字符串是:history读入字符串是:history读入字符串是:history

…它重复了历史上最后一次读到的东西是一百万次。为什么是这样?我也用while条件试过了

while(getchar() != EOF)
但这给了我同样的东西

请帮忙。
谢谢。

fstring
不能通过调用
fscanf
将其设置为NULL。您要检查的是
fscanf
的返回值


您的
getchar()
循环同样没有任何用处-它从标准输入中读取,而不是从您的文件中读取。

+1,作为OP的参考
fscanf()
文档。请特别注意返回值,并注意将
%s
适当限制为目标缓冲区大小小于1。缓冲区溢出非常严重。