0

quit我有一个用 C 编写的简单回显服务器,如果它收到这个词,我想停止服务器

    int n;
    char buffer[256];
    while(strcmp(buffer,"quit") != 0)
    {
        n = read(sock,buffer,255);
        if (n < 0)
        {
        perror("ERROR reading from socket");
        exit(1);
        }

        printf("Here is the message: %s\n",buffer);
        printf("%d-%d\n", sizeof(buffer), strcmp(buffer,"quit"));

        n = write(sock,"I got your message",18);
        if (n < 0) 
        {
        perror("ERROR writing to socket");
        exit(1);
        }
  }

如何将接收到的缓冲区与字符串进行比较?

4

3 回答 3

2

缓冲区可能不是以 0 结尾的,因此使用“字符串”比较函数是错误的。您应该尝试strncmpmemcmp代替。

此外,在这种while情况下,您在实际读入buffer.

于 2012-07-21T09:53:42.143 回答
0

除了其他人所说的之外,您的程序的行为是未定义的:进入循环时,您正在从buffer初始化之前读取。

于 2012-07-21T09:59:53.920 回答
0

我想到了

void strip(char *s) {
    char *p2 = s;
    while(*s != '\0') {
        if(*s != '\t' && *s != '\n' && *s != '\r') {
                *p2++ = *s++;
        } else {
                ++s;
        }
    }
    *p2 = '\0';
}

如何从 C 中的给定字符串中删除 \n 或 \t?

于 2012-07-21T11:00:31.653 回答