获取包含hex值的LPTSTR或CHAR *的大小

我想要获得一个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);

直。