在我看来,人们,尤其是在学习 C 编程语言时,仍在使用该gets
函数从标准输入读取数据。尽管它现在已从C11 标准中删除1 ,并且cppreference上的免责声明如下:
gets() 函数不执行边界检查,因此该函数极易受到缓冲区溢出攻击。它不能安全使用(除非程序在限制标准输入上出现的内容的环境中运行)。出于这个原因,该功能在 C99 标准的第三次勘误中已被弃用,并在 C11 标准中完全删除。fgets() 和 gets_s() 是推荐的替代品。
永远不要使用gets()。
然而,这似乎不是一个新问题,而是出现了更现代的编程哲学。它总是会被破坏并导致程序崩溃,我看不出“限制标准输入上可能出现的内容的环境”可能意味着什么。
那么,它在过去有用吗?或者它被添加到 C 的先前标准和预标准版本的原因是什么?
(1) ...或至少更改为具有指示要读取的最大长度的附加参数。然而,我问的是旧签名,只收到一个指针。