get()和puts()技术上是否可用于字符串?

时间:2014-02-25 20:08:43

标签: c string

我的问题是关于

gets()

puts()

它们是字符串输入和输出的完美解决方案吗?

3 个答案:

答案 0 :(得分:6)

gets在C99中标记为已淘汰,由于此功能存在安全问题,因此已在C11中删除。请勿使用它,请改用fgets。作为一个历史记录,gets被第一个大规模的互联网蠕虫利用(指法):1988年的蠕虫病毒。

如果符合您的需要,

puts功能就可以了。

答案 1 :(得分:4)

gets()从根本上讲是一种非常不安全的方式:它会在其参数中写入无限数量的字符,溢出它提供的任何缓冲区。因此,永远不应该使用它。如果您使用它,许多较新的编译器将发出自动警告。相反,使用fgets(),它需要一个长度参数:

char buf[...];
fgets(buf, sizeof(buf), stdin);

另一方面,puts()完全没问题。它等同于printf("%s\n", x);,并且一些编译器实际上将某些常量printf()调用转换为puts()作为标准优化。狂野。

答案 2 :(得分:3)

对于gets,请参见手册页:

  

<强> BUGS

     

永远不要使用gets()。因为不知道就不可能说出来   数据预先会有多少个字符gets()会被读取,因为gets()会继续存储   超过缓冲区末尾的字符,使用起来非常危险。它已被用来打破计算机安全。请改用fgets()

puts很好,如果您只想将字符串写入stdout