我现在用Google搜索了2个小时,但我无法找到问题的答案:我需要获取注册表REG_SZ
值并将其传递给char*
。
char host_val[1024];
DWORD hostVal_size = 1024;
char* hostName;
DWORD dwType = REG_SZ;
RegOpenKeyEx(//no problem here);
if( RegQueryValueEx( hKey, TEXT("HostName"), 0, &dwType, (LPBYTE)&host_val, &hostVal_size ) == ERROR_SUCCESS )
{
//hostName = host_val;
}
我应该如何进行转换hostName = host_val
?
答案 0 :(得分:4)
结果host_val
是possibly non-null-terminated string(请参阅“备注”),因此您应该将其复制到新分配的memcpy
字符串,并确保它以空值终止:
hostName = new char[hostVal_size + 1];
// host_val may or may not be null-terminated
memcpy(hostName, host_val, hostVal_size);
hostName[hostVal_size] = '\0';
您需要delete[]
稍后hostName
。
答案 1 :(得分:3)
使用函数的ANSI版本
RegQueryValueExA
你不需要转换。
答案 2 :(得分:2)
如果您正在使用Unicode进行编译,则将Unicode字符串(可能未终止)复制到窄字符缓冲区中。 unicode字符串中的第一个字符将是0x3100(考虑到您机器上的字节序,可能是小端,并且您说IP地址为192 ....)
填充到char []数组中的值将作为单字符空终止字符串报告回来。你有两个选择。
出于显而易见的原因,我会采用前两种选择。