2013-10-07 46 views
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天使 历史

然后我用这个print语句仔细检查,我读什么... ...它打印出 “里面串否则读为:在字符串lsthe读取:rmdirthe字符串读的是:在字符串angelthe读的是:在字符串近代史读的是:在字符串近代史读的是:历史

...和它重复读取的最后一件事是历史上亿次。为什么是这种情况?我也试图与while条件

while(getchar() != EOF) 

但是这给了我同样的事情。

请大家帮忙。 谢谢。

回答

1

fstring不能通过调用fscanf而设置为NULL。要检查什么是返回值的fscanf

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

+0

1,而对于OP的参考'的fscanf()'文档[可以找到这里](http://en.cppreference.com/w/c/io/fscanf)。要特别注意返回值,并且做一些注释来正确地限制你'%s'作为你的目标缓冲区大小。缓冲区溢出很糟糕。 – WhozCraig