2011-07-01 69 views
0

我不知道怎麼說,但我知道我做錯了什麼。爲什麼fgets返回一個錯誤的字符串?

char *temp2= "/shares/mJim"; 
char ourList[1024]; 

fgets(ourList, 1024, modified) 

sprintf(sysString, "grep -c %s %s", ourList, temp2); 

現在FGETS它的工作,但是當我試圖形成此字符串的sprintf我得到grep -c Lanuncher.ini,其餘失蹤。現在這裏是踢球,如果我扭轉這樣的順序:

sprintf(sysString, "grep -c %s %s", temp2, ourList); 

其結果將是我想要的,但和grep的無效搜索:grep -c /shares/mJim Lanucher.ini

另外,如果我這樣做:

sprintf(sysString, "grep -c %s %s", temp2, temp2); 

它創建預期的字符串(grep -c /shares/mJim /shares/mJim)。有誰知道發生了什麼事?

那麼輸入的一個簡單的文本文件,它是一個列清單:

Launcher.ini 
bits.exe 
etc.... 

在這種情況下,垃圾是我提到的不尋常的短字符串。當我打印出我們的List有什麼時,它返回Launcher.ini。

+1

如果您可以向我們展示:(1)樣本輸入,(2)所謂的「垃圾」,幫助會容易得多。 –

+0

是的'\ n'是問題謝謝大家的援助。 –

+0

確保標記正確的答案。 –

回答

5

fgets包括尾隨'\n'。你可能想如果你從modified文件流讀取行包含一個換行符在返回的字符串建設sysString之前將其刪除...

fgets(ourList, sizeof ourList, modified); 
size_t ourListlen = strlen(ourList); 
if (ourListlen && (ourList[ourListlen - 1] == '\n')) { 
    ourList[--ourListlen] = 0; /* remove trailing '\n' and update ourListlen */ 
} 
+0

當然,你應該檢查'fgets'的返回值並以適當的方式處理任何錯誤。 – pmg

1

我不確定。我們的清單夠大嗎?你也應該真的檢查fgets()的返回值。

+0

+1表示檢查'fgets'的返回值:) – pmg

1

,即newline will be included。機會是,你有:

"Launcher.ini\n" 

剝去換行符,你應該很好走。

+0

我試過,這可能是問題,以迴應你的所有建議。 –

相關問題