簡體   English   中英

從fgets()的返回值賦值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM