我正在尝试使用下面的代码获取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));
答案 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);
直接