![](/img/trans.png)
[英]Does dereference a NULL pointer guarantee to crash a program in C/C++?
[英]C program - Dereference pointer
我是C语言的新手,正在尝试在有用户输入的情况下运行几行代码。 由于某种原因,我在此行遇到错误:
char names[SIZE][LENGTH];
while(fgets(names, LENGTH, stdin) != '\0')
错误是:“此行有多个标记。指针与零字符常量之间的比较。您是要取消对指针的引用吗?从不兼容的指针类型传递'fgets'的参数1。
有任何想法吗?
看来您将把线读入二维数组的元素中。
来自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;
}
编译器发出的错误消息表示以下内容
从不兼容的指针类型传递'fgets'的参数1。
在此函数调用
fgets(names, LENGTH, stdin)
用作第一个参数的表达式names
类型为char ( * )[LENGTH]
但该函数需要一个char *
类型的参数。
“指针与零字符常量之间的比较。您是要取消对指针的引用吗?
此消息表示编译器无法确定是否将函数指针返回的值与空指针进行比较,或者您是否打算将返回指针指向的字符与字符'\\0'
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.