使用gets时出错是因为它很危险?

时间:2011-03-22 01:34:02

标签: c

  

可能重复:
  Why is the `gets' function is dangerous? Why should not be used?

刚刚开始了一个关于套接字编程的教程。但是在用gcc编译后我得到了这个错误。如何克服这个危险?

In function `main':
tcpserver.c:(.text+0x1f3): warning: the `gets' function is dangerous and should not be used.

这行代码是从互联网(http://www.prasannatech.net/2008/07/socket-programming-tutorial.html)获得的:

printf("\n  Your message (hit q or Q to quit): ");
              gets(send_data);

2 个答案:

答案 0 :(得分:4)

gets()盲目地将数据写入您提供的缓冲区。它既不知道也不关心缓冲区的长度,使其等待buffer overflow等待。如果可以,请改用fgets()

(略微)更多关于获取的危险,请参阅the Linux gets/fgets manpage

答案 1 :(得分:0)

这是先前在stackoverflow上提出的问题的a dupe。基本上,gets()可能容易受到缓冲区溢出的影响,因此编译器建议您使用另一种显式指定要读取的最大缓冲区长度的方法替换它。这种警告在编译器中越来越常见,以鼓励人们编写更安全的代码(缓冲区溢出是安全漏洞的常见来源)。

您的教程代码可能是在本指南成为惯例之前编写的。