我想要获得一个LPTSTRvariables和CONST CHARvariables的大小使用下面的代码,但我无法获得正确的大小。
我应该得到20,但我得到0为const char *variables和4为LPTSTRvariables。
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
我需要获取值的大小插入到Windowsregistry作为二进制数据( REG_BINARY )使用以下函数:
lRes = RegSetValueEx(hMykey, "Scancode Map", 0, REG_BINARY, (LPBYTE) var2, sizeof(var2));
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]) ,这就是你想要的。
你需要做的
const char var1[20] = "\x00\x00\x00\x00" "\x00\x00\x00\x00" "\x02\x00\x00\x00" "\x5B\xE0\x5B\xE0" "\x00\x00\x00\x00";
替代方案:
#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);
直。