当前位置:  技术问答>linux和unix

为什么gets()在gcc编译时会报warning,且经socket发往server端只显示一个字符?

    来源: 互联网  发布时间:2015-11-29

    本文导语:  请问:为什么gets()在gcc编译时会报warning,且经socket发往server端只显示一个字符? 在linux下用c做一个简易的聊天小程序,代码大概如下: /*server.c*/ int accept() {   while(1)   {     if (recv(...)==-1)     {       perror(...

请问:为什么gets()在gcc编译时会报warning,且经socket发往server端只显示一个字符?

在linux下用c做一个简易的聊天小程序,代码大概如下:

/*server.c*/
int accept()
{
  while(1)
  {
    if (recv(...)==-1)
    {
      perror(...);
      exit(1);
     }
     if (buf[0]=='q') break;
  }
}
int main()
{
   createsockect();
   listen();
   accept();
   closesocket();
}

/*client.c*/
int connect()
{
   while(1)
   {
      gets(buf);
      if (buf[0]=='q') break;
      if (send(...)==-1)
      {
         perror("send error");
         exit(1);
      }
   }
}
int main()
{
   createsocket();
   connect();
   closesocket();
}


|
是不是这个:
warning: the `gets' function is dangerous and should not be used.

看字面很容易理解,gets是一个危险的函数,因为它不检查边界,如果用户输入的字串长度大于buf长度,就会指针越界。

用fgets代替gets。
man fgets查找帮助

|
gets用于从标准的输入设备读入到参数中


gets无法知道s的大小。必须要到换行才可以结束,容易造成安全问题


buffer类的建议使用fgets

从socket接受数据建议使用recv
recvfrom
recvmsg

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • CSS属性参考手册 iis7站长之家
  • GET 方式提交的含有特殊字符的参数
  • C++ I/O 成员 get():读取字符
  • 求jsp向对方已知IP传GET方法及参数,并分析返回字符串的例子?
  • 在输入输出字符串时scanf(),printf()和gets(),puts()的区别浅谈
  • php过滤所有恶意字符(批量过滤post,get敏感数据)
  • C++ MultiMaps 成员 get_allocator():返回multimap的配置器
  • Get中文乱码IE浏览器Get中文乱码解决方案
  • C++ Lists(链表) 成员 get_allocator():返回list的配置器
  • php函数get_headers是HEAD请求或GET请求
  • C++ Maps 成员 get_allocator():返回map的配置器
  • 弱问dev_get及dev_get_by_name的使用
  • C++ Vectors 成员 get_allocator():返回vector的内存分配器
  • PHP判断是否有Get参数的方法
  • C++ Double Ended Queues(双向队列) 成员 get_allocator():返回双向队列的配置器
  • 奇怪的gets()!!求救!!
  • java命名空间java.nio类charbuffer的类成员方法: get定义及介绍
  • jquery 获取Url中Get参数
  • C++ Double Ended Queues 成员 get_allocator():returns the dequeue's allocator
  • 表单form的action中的post与get是何意义,有什么区别!???
  • java命名空间java.nio类doublebuffer的类成员方法: get定义及介绍
  • apt-get 命令问题
  • java命名空间java.nio类floatbuffer的类成员方法: get定义及介绍
  • linux 下 没有aptitude,也没有 apt-get。
  • java命名空间java.nio类longbuffer的类成员方法: get定义及介绍
  • 关于gets函数的问题
  • java命名空间javax.swing类inputmap的类成员方法: get定义及介绍
  • 关于gets的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3