据我所知,fgets()返回输入的字符串参数,但是
我收到“错误:从类型'char *'”分配类型'char [101]'时出现不兼容的类型,
那么,为什么变量'line'被认为是'char [101]'类型而不是'char *'类型?
char line[101] = "";
while (feof(filePtr) == 0){
line = fgets(line, 101, filePtr);
strcpy(strPtr, line);
}
答案 0 :(得分:5)
长话短说:你不能将分配给一个数组,它不是一个可修改的左值。您需要定义另一个指针来保存返回值。
为什么变量
line
被视为类型char[101]
而不是char *
在您的情况下,line
并非被视为属于char [101]
类型,确实。 In some of the cases,数组向下衰减到指向数组中第一个元素的指针,但这并没有改变数组变量本身是数组类型的事实。
那就是说,你过度了。您不需要 来存储返回值。您只需针对NULL
进行检查即可完成。 fgets()
无论如何都会将扫描值存储在line
数组中。这就是首先传递line
(和它的大小)的重点。
答案 1 :(得分:4)
这里有两点需要澄清:
您无需在数组指针中获取fgets()
调用的结果。 fgets()
的第一个参数是用于存储读取值的数组。您可以创建任何临时char指针并将fgets()
的结果输入其中。如果该值为null,则此指针仅用于检测fgets()
错误。
c中的数组名称不能分配任何值。由于它在某些情况下被视为指向数组第一个元素的指针,因此可能会被误解。此外,当编译器在编译时知道数组的大小时,它会使用此信息。如果您使用sizeof(line)
,则输出将是101而不是4,这应该是32位计算机中的sizeof(any pointer)
或64位计算机中的8位。