gpt4 book ai didi

C strcmp 不工作

转载 作者:太空宇宙 更新时间:2023-11-04 02:37:12 27 4
gpt4 key购买 nike

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

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

我还检查了服务器是否返回 "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)] = '\0';
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] = '\0'; /* add this line here */

关于C strcmp 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35882217/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com