从 fgets() 的 return 值赋值

assignment from return value of fgets()

我的理解是 fgets() returns 输入的字符串参数,但是

我收到 "error: incompatible types when assigning to type 'char[101]' from type 'char *'",

那么,为什么变量 'line' 被认为是 'char[101]' 类型而不是 'char *' 类型?

char line[101] = "";

while (feof(filePtr) == 0){
    line = fgets(line, 101, filePtr);
    strcpy(strPtr, line);
}

长话短说:您不能分配给一个数组,它不是一个可修改的左值。您需要定义另一个指针来保存 return 值。

why is the variable line considered type char[101] and not type char *

在你的情况下,line 不被 视为 类型 char [101],它确实 . ,数组衰减为指向数组第一个元素的指针,但这并没有改变数组变量本身是数组类型的事实。

也就是说,你做得太过分了。您 不需要 在那里存储 return 值。您可以根据 NULL 检查它并完成。 fgets() 无论如何都会将扫描值存储在 line 数组中。这就是首先传递 line(及其大小)的全部意义。

也就是说,请看Why is “while ( !feof (file) )” always wrong?

这里有两点需要说明一下:

  • 不需要在数组指针中获取fgets()调用的结果。 fgets()的第一个参数是用来存储读取值的数组。您可以创建任何临时字符指针并将 fgets() 的结果放入其中。如果该指针的值为 null,则该指针将仅用于检测 fgets() 错误。

  • c中的数组名不能赋值。因为它在某些情况下被视为指向数组第一个元素的指针,所以它可能会被误解。此外,由于编译器在编译时知道数组的大小,因此它使用此信息。如果您使用 sizeof(line) 输出将是 101 而不是 4,在 32 位机器中应该是 sizeof(any pointer) 或在 64 位机器中是 8。