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