windows — memcpy копирует только один байт через переполнение стека

Я пытаюсь использовать memcpy для преобразования массива TCHAR в массив BYTE, но функция memcpy копирует только 1 TCHAR из массива tchar в байтовый массив.

Я понятия не имею, почему это происходит.

Вот фрагмент кода.

TCHAR test[] = L"This is a test string, its purpose is to do some testing!";
DWORD testSizeBytes = sizeof(TCHAR) * lstrlen(test);
LPBYTE byteArray = new BYTE[testSizeBytes+1];
memcpy(byteArray,test,testSizeBytes);

Если бы я использовал этот фрагмент, byteArray просто содержал бы ‘T’;

Любая помощь будет оценена.

РЕДАКТИРОВАТЬ: я исправил проблему (это была опечатка). Код, который я здесь написал, работает без нареканий. Мой компилятор находится в Windows VM, поэтому мне пришлось перепечатать его здесь и по незнанию исправить опечатку.

1

Решение

TCHAR test[] = L"This is a test string, its purpose is to do some testing!";

Это широкий характер (wchar_t) строка На Windows, с UNICODE определил, что это UTF-16. В UTF-16 персонаж 'T' составляет 2 байта. Первый байт соответствует значению ASCII 'T' (десятичное число 84). Второй байт равен 0. Поэтому, когда вы копируете это в свой байтовый массив, это выглядит как завершенная нулем c-строка с 1 символом. Другие символы есть, но они идут после конца видимой c-строки, поэтому ваш отладчик, по-видимому, игнорирует их.

3

Другие решения

Как упоминалось в комментарии от ajshort, ваш отладчик, вероятно, не осознает, что вы имеете дело с массивом.

Если вы можете использовать свой отладчик для просмотра памяти, попробуйте посмотреть на место в памяти byteArray + 1 а также byteArray + 2, так далее.

Я не на Windows, поэтому я не могу сказать вам, как это сделать, но эквивалент gdb команда будет x byteArray + 1,

0

По вопросам рекламы [email protected]