在我看来,两者都有可能溢出缓冲区.但我建议永远不要使用gets()但仍然鼓励使用scanf().
是仅仅因为scanf()中允许的格式化参数还是有其他原因?
gre*_*det 10
该gets函数不受缓冲区溢出的保护.
使用scanf格式字符串,您可以定义要从标准输入读取的字符串的最大长度,并将其存储在给定的内存缓冲区中.例如,scanf("%10s\n", str);最多可读取10个字符.所述str缓冲器应该是11个字节来存储NULL终止字符.
性能方面,如果您只是scanf用来解决缓冲区溢出问题gets,请选择使用该fgets函数.