Q为什么所有人都说不要使用gets()?
A与fgets(), gets()不同,gets() 无法得知其要读取的缓冲区的大小,因此无法阻止其在输入行比预期长时溢出缓冲区——而墨菲定律表明,迟早会出现一个比预期长的输入行。 [脚注] (你可以说,出于某种原因,比某个最大长度长的输入行是不可能的,但你也可能弄错,[脚注] 无论如何,使用fgets.)
这个标准fgets函数比gets()有了巨大的改进,尽管它也不完美。(如果长行是真实的可能性,必须仔细考虑它们的正确处理。)
之间的另一个区别是fgets()和gets()和fgets()一样,gets() 会保留字符,但也可以很容易地将其删除。请参见问题 7.1,其中有一个代码片段说明了如何用fgets()gets()gets()fgets().
参考文献:Rationale Sec. 4.9.7.2
H&S Sec. 15.7 p. 356