我从C Primer Plus中阅读了一段代码,并努力理解char *s_gets(char *st, int n)
。
我不明白if(ret_val)
的意思.我认为可以删除它。因为ret_val
不NULL
,我觉得if(ret_val)
等同于if(1)
。
char *s_gets(char *st, int n)
{
char *ret_val;
char * find;
ret_val = fgets(st,n,stdin);
if(ret_val)
{
find = strchr(st,'n');
if(find)
{
*find = ' ';
}
else
{
while(getchar() != 'n')
continue;
}
}
return ret_val;}
这是我第二次编辑。
现在,我的理解如下:
起初,char *s_gets(char *st, int n)
具有与fgets(char *st,n,stdin)
类似的功能。但不同的是,*s_gets
不会读'n'
.
我们认为char *st
是"熟能生巧!大约st
的长度是26。
第一种情况,如果0< n < 26
,则if(ret_val)
等效于if(1)
。
第二种情况,如果n == 26
,if(find)
将实施。
最后一种情况,如果n == 0
或n > 26
,ret_val
将被NULL
,所以if语句不会实现。我说的对吗?
不,检查是有原因的。根据fgets()
的手册页,
。
fgets()
成功时返回s
,出错时或文件末尾未读取任何字符时返回NULL
。
因此,我们需要在处理输入之前检查fgets()
调用是否成功,并且有效的输入是否已读入st
。