我尝试使用以下代码获取 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));
最佳答案
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])
,这就是您想要的。
关于c - 获取包含十六进制值的 LPTSTR 或 CHAR* 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9968754/