快捷导航

在C语言中使用gets(buf);有警告是怎么回事?

warning: implicit declaration of function ‘gets’ [-Wimplicit-function-declaration]
         gets(buf);//获取用户输入的字符串,存放到buf中
         ^
/tmp/ccnxjoDy.o:在函数‘main’中:
tcpclient.c:(.text+0x149): 警告: the `gets' function is dangerous and should not be used.
#include #include #include #include #include #include #include #include #include #define PORT 1234#define MAXDATASIZE 100int main(int argc,char *argv[]){    //定义变量    int sockfd,num,numw;    char buf[MAXDATASIZE];    struct hostent *he;    struct sockaddr_in server;    if(argc!=2)    {        printf("Usage:%s\n",argv[0]);        exit(1);    }        //域名解析    if((he=gethostbyname(argv[1]))==NULL)    {        printf("gethostbyname() error\n");        exit(1);        }    //创建套接字    if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)    {        printf("socket() error\n");        exit(1);        }    //初始化    bzero(&server,sizeof(server));    server.sin_family=AF_INET;    server.sin_port=htons(PORT);    server.sin_addr=*((struct in_addr *)he->h_addr);    //建立与服务器的连接    if(connect(sockfd,(struct sockaddr *)&server,sizeof(server))==-1)    {        printf("connect() error\n");        exit(1);    }    while(1){        printf("Please enter a string:\n");        gets(buf);//获取用户输入的字符串,存放到buf中        if((numw=write(sockfd,buf,MAXDATASIZE))==-1){//将buf中的数据发送给服务器            printf("write error.\n");            exit(1);        }        if((num=recv(sockfd,buf,MAXDATASIZE,0))==-1)//接收从服务器发回来的已经反转的字符串        {            printf("recv() error\n");            exit(1);        }        if(!strcmp(buf,"tuiq"))            break;        buf[num-1]='\0';        printf("The reverse message:\n%s\n",buf);    }    close(sockfd);//关闭套接字}

免责声明:本内容仅代表回答者见解不代表本站观点,请谨慎对待。

版权声明:作者保留权利,不代表本站立场。

回复

使用道具 举报

参与会员1

因为gets函数可以无限读取,除非遇到换行或者文件结束,缓存很容易溢出,因此是不安全的
回复

使用道具 举报

可能感兴趣的问答

发新帖
TA的信息
  • 会员所属: 注册会员
  • 认证信息: 邮箱认证手机认证
  • 微信访问
  • 手机APP