Причина, по которой Things Go Wrong ™ здесь заключается в том, что вы выбрали слишком низкий уровень абстракции, memcmp
.
На один уровень выше у вас есть strcmp
и wcscmp
.
И на один уровень выше, чем у вас есть std::string
и std::wstring
.
"Скорость" (ха!) Выбранной вами самой низкой возможной абстракции уровня смещена на
Неверный результат.
Неэффективность из-за недостатка знания типа (широкая или узкая строка, ваш код не знает).
Неэффективность из-за недостатка знаний о данных (в верхнем или нижнем регистре).
Вместо того, чтобы тратить время на решение проблем с неэффективным кодом нижнего уровня и тратить время на выяснение проблемдетали инструментов низкого уровня, используйте более высокий и безопасный уровень абстракции.
Только для записи,
sizeof( "abcd" )
равно 5. Вероятно, как заметил Ганс Пассант, окно просмотра показывает размер указателя.Однако я не согласен с Гансом в том, что отладчик, как правило, не может узнать размер массива: для отладочной сборки он может знать что угодно и все об исходном источнике, включая дословный исходный источник, если это необходимо (и он отображает это дословнопервоисточник, в контексте).Таким образом, 4 является ИМХО ошибкой, так или иначе.Либо ошибка в коде отладчика, либо ошибка в его дизайне.
Cheers & hth.,