2013-10-07 45 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