我的问题是关于
gets()
和
puts()
它们是字符串输入和输出的完美解决方案吗?
答案 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
。