Получение размера LPTSTR или CHAR *, содержащего шестнадцатеричные значения - PullRequest
3 голосов
/ 02 апреля 2012

Я пытаюсь получить размер переменной LPTSTR и переменной CONST CHAR, используя приведенный ниже код, но я не могу получить правильный размер.

Я должен получить 20, но вместо этого я получаю 0 для переменной const char * и 4 для переменной LPTSTR.

const char *var1 =  "\x00\x00\x00\x00"
                    "\x00\x00\x00\x00"
                    "\x02\x00\x00\x00"
                    "\x5B\xE0\x5B\xE0"
                    "\x00\x00\x00\x00";

LPTSTR var2 =       "\x00\x00\x00\x00"
                    "\x00\x00\x00\x00"
                    "\x02\x00\x00\x00"
                    "\x5B\xE0\x5B\xE0"
                    "\x00\x00\x00\x00";

printf("%d",  sizeof(var1));  // this outputs 0
printf("%d",  sizeof(var2));  // this outputs 4

Мне нужно получить размер значения, чтобы вставить его в реестр Windows в виде двоичных данных (REG_BINARY) используя следующую функцию:

lRes = RegSetValueEx(hMykey, "Scancode Map", 0, REG_BINARY, (LPBYTE) var2, sizeof(var2));

Ответы [ 3 ]

3 голосов
/ 02 апреля 2012

Тип var1 равен const char*, а размер var2 равен LPTSTR (в вашем случае это псевдоним char*).sizeof var1 эквивалентно sizeof (const char*), а не размеру массива символов, на который он указывает.На вашей платформе sizeof (char*) - это 4 байта.

Вместо этого вы можете сделать:

const char var1[] = { 0x00, 0x00, ..., 0x00 };

И тогда sizeof var1 будет эквивалентно sizeof (const char[20]), что вам и нужно.

0 голосов
/ 02 апреля 2012

Альтернатива:

#define STR "\x00\x00\x00\x00" \
            "\x00\x00\x00\x00" \
            "\x02\x00\x00\x00" \
            "\x5B\xE0\x5B\xE0" \
            "\x00\x00\x00\x00"
const char * var1 = STR;

printf("%d\n", sizeof(STR)-1);

Не уверен, какова цель этих переменных, но вы также можете сделать

lRes = RegSetValueEx (hMykey, "Scancode Map", 0, REG_BINARY,(LPBYTE) STR, sizeof (STR) -1);

напрямую.

0 голосов
/ 02 апреля 2012

нужно сделать

const char var1[20] =  "\x00\x00\x00\x00"
                "\x00\x00\x00\x00"
                "\x02\x00\x00\x00"
                "\x5B\xE0\x5B\xE0"
                "\x00\x00\x00\x00";
...