C strcmp 不工作

C strcmp not working

所以我有以下代码,基本上 buffer 应该包含一个字符串,"NOT FOUND" 由我连接的服务器提供。它由第一个功能块中的 recvfrom() 系统调用完成。

问题是它仍然是我的 if 条件,if (strcmp(buffer, "NOT FOUND") != 0),而不是下面的 else 块。我不确定怎么了。

我还检查了服务器是否 return "NOT FOUND",但是在打印缓冲区时,打印:"NOT FOUNDJ�".

BUFFER_SIZE80

void recvFromServer(int sd, char* buf) {

    struct sockaddr_in6 client;
    socklen_t client_len = sizeof(client);

    int rd = recvfrom(sd, buf, BUFFER_SIZE, 0, (struct sockaddr *)&client, &client_len);
    if (rd < 0) {
        printf("ERROR: recvfrom() failed\n");
        return;
    }

    char host[BUFFER_SIZE], service[BUFFER_SIZE];
    int r = getnameinfo((struct sockaddr *)&client, client_len, host, sizeof(host),
                    service, sizeof(service), 0 | NI_NUMERICHOST);

    if (r < 0) {
        printf("ERROR: getnameinfo() failed\n");
        return;
    }

}

recvFromServer(sd, buffer);

printf("L %s\n", buffer);
char address[80], port[80];

if (strcmp(buffer, "NOT FOUND") != 0) {
    char *index = strchr(buffer, ' ');
    strncpy(address, buffer, index - buffer);
    address[strlen(address)] = '[=10=]';
    strcpy(port, &buffer[index - buffer + 1]);
    printf("%s\n", address);
    printf("%s\n", port);
    sendMessageUDP(argv[4], sd, address, port);
} else 
    printf("Not Found\n");

在将其视为字符串之前,您必须向收到的内容添加终止空字符。

假设buffer的声明是char buffer[BUFFER_SIZE];,

int rd = recvfrom(sd, buf, BUFFER_SIZE, 0, (struct sockaddr *)&client, &client_len);
if (rd < 0) {
    printf("ERROR: recvfrom() failed\n");
    return;
}
buf[rd >= BUFFER_SIZE ? BUFFER_SIZE - 1 : rd] = '[=10=]'; /* add this line here */