C程序 - 解引用指针

时间:2017-10-19 23:10:26

标签: c arrays multidimensional-array fgets

我是C的新手,并且在用户输入时尝试运行几行代码。出于某种原因,我在这一行收到错误:

pip

错误是:“此行有多个标记。指针和零字符常量之间的比较。你的意思是取消引用指针吗?从不兼容的指针类型传递'fgets'的参数1。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您似乎要将线条读入二维数组的元素。

从C标准(7.21.7.2 fgets功能)

  

3如果成功,fgets函数返回s。 如果文件结尾是   遇到并且没有字符被读入数组,   数组的内容保持不变,并返回空指针。   如果在操作期间发生读取错误,则数组内容为   不确定并返回空指针。

因此,正确的循环可能看起来像

size_t i = 0;
while( i < SIZE && fgets(names[i], LENGTH, stdin) != NULL)
{
    //...
    ++i;
} 

或者,如果您在遇到空行时要停止阅读行,那么您可以写

size_t i = 0;
while( i < SIZE && fgets(names[i], LENGTH, stdin) != NULL && names[i][0] != '\n' )
{
    //...
    ++i;
} 

编译器发出的错误消息意味着以下

  

传递&#39; fgets&#39;的参数1来自不兼容的指针类型。

在此函数调用中

fgets(names, LENGTH, stdin)

用作第一个参数的表达式names具有类型char ( * )[LENGTH],但该函数需要类型为char * 的参数。

  

&#34;指针和零之间的比较   字符常数。你的意思是取消引用指针吗?

此消息表示编译器无法断定函数指针返回的是否与空指针进行比较,或者您要将返回指针指向的字符与字符'\0'进行比较。 / p>