[英]assignment from return value of fgets()
據我了解,fgets()返回輸入的字符串參數,但是,
我收到“錯誤:從'char *'類型分配給'char [101]'類型時不兼容的類型”,
那么,為什么變量'line'被認為類型為'char [101]'而不是類型'char *'?
char line[101] = "";
while (feof(filePtr) == 0){
line = fgets(line, 101, filePtr);
strcpy(strPtr, line);
}
長話短說:您不能分配給數組,它不是可修改的左值。 您需要定義另一個指針來保存返回值。
為什么變量
line
被認為是char[101]
類型而不是char *
在你的情況下, line
不被認為是類型char [101]
它確實是 。 在某些情況下 ,數組會衰減到指向數組中第一個元素的指針,但這不會改變數組變量本身是數組類型的事實。
就是說,你太過分了。 您無需在此處存儲返回值。 您可以對照NULL
進行檢查並完成操作。 fgets()
始終將掃描的值存儲line
數組中。 這就是傳遞line
的全部要點(及其大小)。
也就是說,請參見為什么“ while(!feof(file))”總是錯誤的?
這里有兩點需要澄清:
您不需要在數組指針中獲取fgets()
調用的結果。 fgets()
的第一個參數是用於存儲讀取值的數組。 您可以創建任何臨時char指針,並將fgets()
的結果放入其中。 如果該指針的值為null,則僅用於檢測fgets()
錯誤。
c中的數組名稱不能分配任何值。 在某些情況下,由於它被視為指向數組第一個元素的指針,因此可能會被誤解。 同樣,由於編譯器在編譯時知道數組的大小,因此它也會使用此信息。 如果您使用sizeof(line)
則輸出將為101而不是4,這在32位計算機中為sizeof(any pointer)
,在64位計算機中為8。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.