C - 关于 char *s_gets(char *st, int n) 的问题



我从C Primer Plus中阅读了一段代码,并努力理解
char *s_gets(char *st, int n)
我不明白if(ret_val)的意思.我认为可以删除它。因为ret_valNULL,我觉得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 == 26if(find)将实施。

最后一种情况,如果n == 0n > 26ret_val将被NULL,所以if语句不会实现。我说的对吗?

不,检查是有原因的。根据fgets()的手册页,

fgets()成功时返回s,出错时或文件末尾未读取任何字符时返回NULL

因此,我们需要在处理输入之前检查fgets()调用是否成功,并且有效的输入是否已读入st

相关内容

  • 没有找到相关文章

最新更新