這是我的理解是FGETS()返回字符串參數輸入,然而,分配
我收到「錯誤:分配給輸入「的char [101時不兼容的類型'','
因此,爲什麼變量'line'被認爲是類型'char [101]'而不是'char *'?
char line[101] = "";
while (feof(filePtr) == 0){
line = fgets(line, 101, filePtr);
strcpy(strPtr, line);
}
這是我的理解是FGETS()返回字符串參數輸入,然而,分配
我收到「錯誤:分配給輸入「的char [101時不兼容的類型'','
因此,爲什麼變量'line'被認爲是類型'char [101]'而不是'char *'?
char line[101] = "";
while (feof(filePtr) == 0){
line = fgets(line, 101, filePtr);
strcpy(strPtr, line);
}
有兩點在這裏澄清:
你並不需要得到數組指針fgets()
調用的結果。 fgets()
的第一個參數是要用於存儲讀取值的數組。您可以創建任何臨時字符指針並將fgets()
的結果加入其中。如果該指針的值爲null,則該指針僅用於檢測fgets()
錯誤。
c中的數組名稱無法賦值。因爲它在某些情況下被視爲指向數組第一個元素的指針,所以可能會被誤解。同樣,編譯器在編譯時知道數組的大小,它使用這些信息。如果使用sizeof(line)
,則輸出將是101而不是4,這應該是32位機器中的sizeof(any pointer)
或64位機器中的8個機器中的情況。
這很棘手,但數組名稱不是指針;它是一個數組的名稱。在許多情況下,它變成了一個指向數組第一個元素的指針,但不是全部('sizeof'是衆所周知的,'_Alignof'不是衆所周知的)。數組名稱(與數組類似的函數參數不同)不是可修改的左值;你不能分配給它。但嚴格來說,這不是因爲它是一個不變的指針,儘管它是中等相似的。 –
@Jonathan Leffler我根據你的評論修改了我的答案。 –
長話短說:你不能分配到一個數組,它不是一個修改的左值。您需要定義另一個指針來保存返回值。
why is the variable
line
considered typechar[101]
and not typechar *
在你的情況,line
不認爲是char [101]
類型,它是確實如此。 In some of the cases,數組衰減到指向數組中第一個元素的指針,但這並不改變數組變量本身是數組類型的事實。
這就是說,你正在過度使用它。你不需要需要來存儲返回值。你可以檢查它對NULL
並完成。無論如何,fgets()
將掃描值存儲在line
數組中。這就是首先通過line
(以及它的大小)。
,因爲這是它是如何定義的? – StoryTeller
[使用'FEOF()'作爲循環條件不好。(http://stackoverflow.com/questions/5431941/why-is-while-feof-文件總是錯誤的) – MikeCAT