获取包含十六进制值的LPTSTR或CHAR *的大小

时间:2012-04-01 22:07:51

标签: c windows string winapi sizeof

我正在尝试使用下面的代码获取LPTSTR变量和CONST CHAR变量的大小,但是我无法获得正确的大小。

我应该得到20,但是我的const char *变量为0,LPTSTR变量为4。

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

我需要使用以下函数将值的大小作为二进制数据(REG_BINARY)插入Windows注册表中:

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

3 个答案:

答案 0 :(得分:3)

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]),这就是你想要的。

答案 1 :(得分:0)

你需要做

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

答案 2 :(得分:0)

替代:

#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);

直接