C语言中NULL问题

C语言中NULL用什么来表示的?比如我下面的题目,运行后就是死循环,程序理论上没有任何问题,书本解释当我输入空串(也就是回车符)的时候可以结束循环,事实上并不能结束循。程... C语言中NULL用什么来表示的?
比如我下面的题目,运行后就是死循环,程序理论上没有任何问题,书本解释当我输入空串(也就是回车符)的时候可以结束循环,事实上并不能结束循。程序如下:
#include "stdio.h"
main()
{ char buff[256];
while(gets(buff)!=NULL)
puts(buff);
}
展开
 我来答
Chaykovsky
2006-04-28 · TA获得超过1658个赞
知道小有建树答主
回答量:604
采纳率:0%
帮助的人:559万
展开全部
要想知道为什么会出现死循环,首先必需明白while(gets(buff)!=NULL)这行代码的含义。先看一下gets函数的声明:
char *gets(
char *buffer
);
它有一个参数buffer,指向char类型的指针。指向输入字符串缓冲区地址。如果函数调用成功则它的返回值为buffer的地址,如果调用失败则返回NULL。
所以while(gets(buff)!=NULL)这行代码就是只要gets函数调用失败就停止循环,但一般这个函数调用失败的机率是很小的,所以就出现了死循环。要明白这一点必需知道,gets函数的返回值为输入字符串的地址,而NULL不等于空字符串,也不等于空字符串的地址。
把那个程序改为如下的形式就对了。

#include "stdio.h"
main()
{ char buff[256];
while(strcmp(gets(buff),"")!=0)
puts(buff);
}
/*注:strcmp为字符串比较的函数,当两字符串相同时返回0*/
凝素慧5675
2006-04-28 · TA获得超过674个赞
知道小有建树答主
回答量:1155
采纳率:0%
帮助的人:785万
展开全部
你必须写以下的语句,因为NULL并不是C的关键词
#ifndef NULL
#define NULL 0
#endif
一般NULL值为0表示空
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
踏岸寻柳
2006-04-28 · TA获得超过6912个赞
知道小有建树答主
回答量:1776
采纳率:0%
帮助的人:627万
展开全部
更改一下代码:
#include <stdio.h>

int main(int argc, char *argv[])
{
char buff[256];
gets(buff);
while( strlen(buff)!=0 )
{
puts(buff);
gets(buff);
}

return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友bfba2eeb8
2006-04-28 · TA获得超过101个赞
知道小有建树答主
回答量:768
采纳率:0%
帮助的人:184万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式