2009-10-06 37 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用於空終止的字符串。