3 回答

TA贡献1831条经验 获得超10个赞
绝不可能
使用 gets
..它不提供针对缓冲区溢出漏洞的保护(也就是说,您不能告诉它您传递给它的缓冲区有多大,因此它不能阻止用户进入大于缓冲区的行并破坏内存)。 避免使用 scanf
..如果不小心使用,它可能会出现与以下相同的缓冲区溢出问题: gets
..即使忽略了这一点, 它还有其他问题,使它很难正确使用。.通常您应该使用 fgets
相反,尽管有时很不方便(您必须去掉换行符,您必须提前确定缓冲区大小,然后您必须弄清楚如何处理太长的行-您是否保留了所读的部分和 丢弃多余的,丢弃整件事,动态增长缓冲区,然后再试一次,等等)。有一些非标准的函数可以为您执行这种动态分配。 getline
关于POSIX系统, 查克·法尔科纳的公共领域 ggets
职能)。请注意 ggets
有 gets
-就像语义学一样,它为你剥去了一个尾随的换行符。

TA贡献1793条经验 获得超6个赞
gets
. fgets
fgets
fscanf
"%N[^\n]"
fgets
strtok(buffer, "\n");
strtok
- 3 回答
- 0 关注
- 323 浏览
添加回答
举报