2009-10-06 38 views
0

我正在使用strcmp,如下所示。C++ 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) { 
} 
+0

您是打算在这里匹配ASCII字符0和1还是二进制值0和1? – bdonlan 2009-10-06 02:13:18

回答

3

从我可以告诉你,你没有比较两个字符串,因为它们不以null结尾。您可能需要使用memcmp()代替:

if (memcmp(blk_receive_opcode, opcode_data, 2) == 0) { 
} 
3

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

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

另一种方法是使用memcmp,而不是STRCMP,所以你不必担心烦人的NUL终止符。

recvfrom通话也有点可怕。如果我正确记得我的TCPIP。不保证该函数将在一次调用中返回2个字节。它可以在第一次调用中返回一个字节,在第二次调用中返回第二个字节。

+1

blk_receive_opcode也不是空终止的,并且由于长度是固定的,所以他可能会使用'memcmp' – bdonlan 2009-10-06 02:14:32

+0

+1作为recvfrom警告! – bdonlan 2009-10-06 02:15:54

+2

更好的选择是编写'const char opcode_read [] =“01”;'但这可能就是我。 – 2009-10-06 02:15:56

3

您可能想尝试memcmpstrcmp用于空终止的字符串。