C ++ массив strcmp - PullRequest
       32

C ++ массив strcmp

0 голосов
/ 06 октября 2009

Я использую 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) {
}

Ответы [ 3 ]

3 голосов
/ 06 октября 2009

Возможно, вы захотите попробовать memcmp. strcmp для строк с нулевым символом в конце.

3 голосов
/ 06 октября 2009

Насколько я могу судить, вы не сравниваете две строки, поскольку они не заканчиваются нулем. Вы можете использовать memcmp() вместо:

if (memcmp(blk_receive_opcode, opcode_data, 2) == 0) {
}
3 голосов
/ 06 октября 2009

opcode_read не является строкой. Нет завершения NUL. Измените его размер на 3, чтобы вы взяли NUL на третьей позиции.

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

В качестве альтернативы можно использовать memcmp вместо strcmp , чтобы вам не пришлось беспокоиться о досадном терминаторе NUL.

Вызов recvfrom тоже немного страшен. Если я правильно помню мой TCPIP. Нет гарантии, что функция вернет 2 байта за один вызов. Он может вернуть один байт при первом вызове и второй байт при втором вызове.

...