我的代码遇到一些问题。我正在尝试读取保存到文件中的一些先前命令,并将它们放入我的数组中以供以后使用。
这是我的相关代码:
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)
但这给了我同样的东西。
请帮忙。 谢谢。
最佳答案
fstring
永远不能通过调用 fscanf
设置为 NULL。您要检查的是fscanf
的返回值。
您的 getchar()
循环同样没有做任何有用的事情 - 它是从标准输入读取,而不是从您的文件中读取。
关于c - 从文件扫描,最后一个字符串重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19236222/