为什么gets()比scanf()更危险?

Dag*_*len 6 c

在我看来,两者都有可能溢出缓冲区.但我建议永远不要使用gets()但仍然鼓励使用scanf().

是仅仅因为scanf()中允许的格式化参数还是有其他原因?

gre*_*det 10

gets函数不受缓冲区溢出的保护.

使用scanf格式字符串,您可以定义要从标准输入读取的字符串的最大长度,并将其存储在给定的内存缓冲区中.例如,scanf("%10s\n", str);最多可读取10个字符.所述str缓冲器应该是11个字节来存储NULL终止字符.

性能方面,如果您只是scanf用来解决缓冲区溢出问题gets,请选择使用该fgets函数.