在C Primer Plus这本书里, s_gets函数出现了很多次,对此函数不理解的话可以阅读下面的解析和例程,相信你会豁然开朗
1. s_gets函数原型
char *s_gets(char *st, int n)
{
char *ret_val;
char *find;
ret_val = fgets(st, n, stdin); // 从stdin中读取n-1个字符
if(ret_val)
{
find = strchr(st, '\n'); // 查找换行符
if(find)
{
*find = '\0';
}
else
{
while(getchar() != '\n')
continue;
}
}
return ret_val;
}
接下来对内部的函数进行分析
fgets()
虽然用 gets() 时有空格也可以直接输入,但是 gets() 有一个非常大的缺陷,即它不检查预留存储区是否能够容纳实际输入的数据,换句话说,如果输入的字符数目大于数组的长度,gets 无法检测到这个问题,就会发生内存越界,所以编程时建