0

我正在使用 strcmp,如下所示。

我正在调试这些值,这些值是相同的,但仍然没有使该条件成立。

const char opcode_read[2] = {'0', '1'};

rc = recvfrom(s, blk_receive_full, sizeof (blk_receive_full), 0,(struct sockaddr FAR *)&sin, &fromlength);

if(rc == -1){
    printf("failed: recvfrom, \n No data received \n failed code: %d\n",WSAGetLastError());
    cleanup();
    exit(1);
}

memcpy(blk_receive_opcode, &blk_receive_full, 2);
if (strcmp(blk_receive_opcode, opcode_data) == 0) {
}
4

3 回答 3

3

opcode_read不是字符串。没有 NUL 终止。将其大小更改为 3,因此您在第三个位置选择 NUL。

const char opcode_read[3] = {'0', '1'};

另一种方法是使用memcmp而不是strcmp,这样您就不必担心讨厌的 NUL 终止符。

recvfrom调用也有点吓人。如果我正确地记得我的 TCPIP。不能保证函数在一次调用中返回 2 个字节。它可能在第一次调用中返回一个字节,在第二次调用中返回第二个字节。

于 2009-10-06T02:08:04.827 回答
3

您可能想尝试一下memcmpstrcmp用于以空结尾的字符串。

于 2009-10-06T02:09:53.170 回答
3

据我所知,您没有比较两个字符串,因为它们不是以空值结尾的。您可能想memcmp()改用:

if (memcmp(blk_receive_opcode, opcode_data, 2) == 0) {
}
于 2009-10-06T02:10:22.933 回答