prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 12.23

Q为什么所有人都说不要使用gets()?


Afgets(), 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


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管