0

私はCで書かれた単純なエコーサーバーを持っています、それがquit単語を受け取ったらサーバーを停止したいです

    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 で終了していない可能性が高いため、「文字列」比較関数の使用は間違っています。strncmporを試す必要がありmemcmpます。

また、このwhile状態では、実際に を読み込む前にテストしていますbuffer

于 2012-07-21T09:53:42.143 に答える
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 に答える
0

他の人が言ったことに加えて、プログラムの動作は定義されていません。ループに入る間、buffer初期化される前から読んでいます。

于 2012-07-21T09:59:53.920 に答える