繁体   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