gets()是否正式弃用?

Cub*_*bbi 5 c c++ gets deprecated

基于最新的C++ 11 草案,C++引用了ISO/IEC 9899:1999/Cor.3:2007(E)中C库函数的定义(根据§1.2[intro.refs]/1) .

根据最新的C99 TC3 草案,The gets function is obsolescent, and is deprecated.(根据§7.26.9/ 2)

我可以肯定地说gets()在C和C++中都弃用了吗?

R..*_*R.. 3

有关系吗?您可以使用的唯一方法gets是如果stdin已知附加到您可以完全控制其内容的文件。这个条件几乎不可能满足,特别是在多进程系统上,其他进程可能会相对于您的程序异步修改文件。因此,出于所有实际目的,任何使用的程序gets都具有未定义的行为(即存在可能的输入/环境条件,其将具有未定义的行为),特别是 UB,如果您的程序具有比数据的提供者。

编辑:好的,这是 的一种安全用法gets,大约是我能立即想到的唯一一种......

if (feof(stdin)) gets(buf);
Run Code Online (Sandbox Code Playgroud)

当然,即使已经为流设置了 EOF 指示符,一些有缺陷的实现(可能包括 glibc..?)也允许读取,所以......