在我看来,两者都有可能溢出缓冲区。然而,我被建议永远不要使用 gets(),但仍然鼓励我使用 scanf()。
仅仅是因为 scanf() 中允许的格式化参数还是有其他原因?
最佳答案
gets
函数没有针对缓冲区溢出的保护。
使用scanf
格式字符串,您可以定义要从标准输入读取并存储在给定内存缓冲区中的字符串的最大长度。例如,使用 scanf("%10s\n", str);
最多可读取 10 个字符。 str
缓冲区应为 11 个字节以存储 NULL 终止字符。
在性能方面,如果您只使用 scanf
来解决 gets
的缓冲区溢出问题,请改用 fgets
函数。
关于c - 为什么 gets() 比 scanf() 更危险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15390675/