从 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。
我的理解是 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 typechar[101]
and not typechar *
在你的情况下,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。