在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 <stdio.h>
#include <unistd.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdlib.h>
#include <string.h>

#define PORT 1234
#define MAXDATASIZE 100

int 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<IP Address>\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);//关闭套接字
}


qq_莫非
浏览 3804回答 1
1回答

_夕晨踏雪

因为gets函数可以无限读取,除非遇到换行或者文件结束,缓存很容易溢出,因此是不安全的
打开App,查看更多内容
随时随地看视频慕课网APP