【问题标题】:Scanning from File, last string is repeating从文件扫描,最后一个字符串重复
【发布时间】:2013-10-07 22:55:39
【问题描述】:

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

这是我的相关代码:

    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 里面!读入的字符串是:ls 读入的字符串是:rmdir 读入的字符串是:angel 读入的字符串是:history 读入的字符串是:history 读入的字符串是:history

...它重复读到的最后一件事是历史一百万次。为什么会这样?我也尝试了 while 条件

while(getchar() != EOF)

但这给了我同样的东西。

请帮忙。 谢谢。

【问题讨论】:

    标签: c file scanf


    【解决方案1】:

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

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

    【讨论】:

    • +1,供 OP 参考 fscanf() 文档 can be found here。请特别注意返回值,并注意将%s 正确限制为目标缓冲区大小减一。缓冲区溢出糟透了。
    猜你喜欢
    • 2022-11-27
    • 2017-03-30
    • 2016-05-18
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2017-10-12
    • 2011-08-01
    相关资源
    最近更新 更多