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

标签 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));

最佳答案

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/

相关文章:

c - 如何从用户c获取输入整数

javascript - IE10 JavaScript 无法在计算机锁定时重新绘制窗口?

windows - 为什么 Windows 上的 llvm-config 不为 clang++.exe 发出正确的参数?

ruby - 如何打印字符串中每一行的行号?

库之间的 C 字符串转换

c++ - gdb: 打印 sockaddr 指针值

c - 有没有C语言的跨平台GUI库?

c++ - 为什么 gcc 允许使用大于数组的字符串文字初始化 char 数组?

c++ - 是否可以创建比屏幕更大的 Windows 终端? C++

sql - 在一个查询中聚合分组结果集中的所有单个列 : is it possible?