【发布时间】:2020-07-21 00:49:25
【问题描述】:
下面是库函数gets()的实现
// I know gets() can cause buffer overflow easily, just use this fuction for demo purpose
char *gets(char *s)
{
int c;
char *dest = s;
while ((c = getchar()) != ’\n’ && c != EOF)
*dest++ = c;
if (c == EOF && dest == s)
return NULL;
*dest++ = ’\0’;
return s;
}
void echo()
{
char buf[8];
gets(buf);
}
我有两个问题:
Q1-对于这条语句*dest++ = c;,我们知道后缀自增的优先级高于解引用,所以*dest++等价于*(dest++),但是我们不是丢失了第一个元素buf[0]吗?
Q2-为什么gets() 需要返回一个字符指针?返回指针与参数s 不一样吗?将gets() 方法签名设为:
void gets(char *s)
【问题讨论】:
-
gets()的返回值对于错误检查很有用。详情请见this question。 -
@JohnColeman 参数与返回的指针是同一个指针,用户应检查参数指针是否为空以进行错误检查
-
有
return NULL,但s从未设置为NULL -
我很高兴看到有关缓冲区溢出的评论,但我仍然要提到
gets函数已从 2011 ISO C 标准的 C 库中删除。
标签: c