1

我想比较客户端发送到服务器的一些数据。当我使用 strncmp 比较我从套接字读取的内容和我用来比较的字符串时,我遇到了这个错误。有人能告诉我为什么会出现这个错误吗?

警告:传递 'strncmp' 的参数 1 使指针从整数而不进行强制转换

服务器:

void
result(int sockfd)
{
    ssize_t     n;
    char        buf[MAXLINE];
    int         temp;
    time_t      ticks;
    int         i;
again:
    while ((n =read(sockfd, buf, MAXLINE)> 0))
    {
     buf[n] = '\0';
     printf("Message Recieved:%s\n",buf);
     srand (time(NULL));
     temp = rand() % 40+1;
     printf("Ramdom es %i\n",temp);

     if ((strncmp (buf[0],"Axx",1) == 0) || (strncmp (buf[0],"axx",1) == 0))
     {
      snprintf(buf, sizeof(buf), "Option A choosen in %i on %.24s\r\n", temp,ctime(&ticks));
      Writen(sockfd, buf, n);
     }
     if ((strncmp (buf[0],"Bxx",1) == 0) || (strncmp (buf[0],"bxx",1) == 0))
     {
      snprintf(buf, sizeof(buf), "Option B choosen in %i on %.24s\r\n", temp,ctime(&ticks));
      Writen(sockfd, buf, n);
     }
     else
     {
       printf("Incorrect Input");
       Close(sockfd);
       break;
     }  
    }
    if (n < 0 && errno == EINTR)
    goto again;
    else if (n < 0)
        err_sys("read error");
}

int
main(int argc, char **argv)
{
    int                 listenfd, connfd;
    socklen_t           len;
    struct sockaddr_in  servaddr, cliaddr;
    char                buff[MAXLINE];
    /*char                message[MAXLINE];*/
    char                recvline[MAXLINE + 1];

    listenfd = Socket(AF_INET, SOCK_STREAM, 0);
    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family      = AF_INET;
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);/*----------------------------------------------------*/
    servaddr.sin_port        = htons(5678); 

    Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));
    Listen(listenfd, LISTENQ);
    printf("EDMTS is running on 127.0.0.1, listening on port 5678\n");
    printf("\n");
    printf("Waiting for incoming connections...Press Ctrl+C to end server\n");

    for ( ; ; )
    {
        len = sizeof(cliaddr);
        connfd = Accept(listenfd, (SA *) &cliaddr, &len);

        /*Client connects to server*/
        printf("\n");
        printf("Connection from %s, port %d\n",
               Inet_ntop(AF_INET, &cliaddr.sin_addr, buff, sizeof(buff)),
               ntohs(cliaddr.sin_port));

            result(connfd);
                Close(connfd);

    }
}

非常感谢。

4

3 回答 3

2

strncmp需要一个const char*作为第一个参数,而您只传递一个字符。

将其更改为:

 if ((strncmp (buf,"Bxx",1) == 0) || (strncmp (buf,"bxx",1) == 0))
于 2013-03-23T19:56:28.233 回答
1

buf[0]是 a char,但strncmp需要 a char*。代替

strncmp (buf[0],"Axx",1)

做了

strncmp (buf,"Axx",1)

等等

但是,如果您将 1 作为长度参数传递给strncmp,您也可以只检查

if (buf[0] == 'A' || buf[0] == 'a') // resp. 'B', 'b'

并避免函数调用。

于 2013-03-23T19:56:03.077 回答
1

您不应该传递字符 ( buf[0]),而是传递指向字符 (buf例如) 的指针以进行比较。

于 2013-03-23T19:56:13.007 回答