C strcmp 不工作
C strcmp not working
所以我有以下代码,基本上 buffer
应该包含一个字符串,"NOT FOUND"
由我连接的服务器提供。它由第一个功能块中的 recvfrom()
系统调用完成。
问题是它仍然是我的 if 条件,if (strcmp(buffer, "NOT FOUND") != 0)
,而不是下面的 else 块。我不确定怎么了。
我还检查了服务器是否 return "NOT FOUND"
,但是在打印缓冲区时,打印:"NOT FOUNDJ�"
.
BUFFER_SIZE
是 80
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 */
所以我有以下代码,基本上 buffer
应该包含一个字符串,"NOT FOUND"
由我连接的服务器提供。它由第一个功能块中的 recvfrom()
系统调用完成。
问题是它仍然是我的 if 条件,if (strcmp(buffer, "NOT FOUND") != 0)
,而不是下面的 else 块。我不确定怎么了。
我还检查了服务器是否 return "NOT FOUND"
,但是在打印缓冲区时,打印:"NOT FOUNDJ�"
.
BUFFER_SIZE
是 80
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 */