C ++ char转换

时间:2012-09-07 06:01:41

标签: c++ windows char

我现在用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

3 个答案:

答案 0 :(得分:4)

结果host_valpossibly 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 []数组中的值将作为单字符空终止字符串报告回来。你有两个选择。

  1. 使用RegQueryValueExA,其他所有内容保持不变,或
  2. 将您的char []数组更改为wchar_t []数组,执行您当前正在执行的操作,然后使用WideCharToMultiByte转换为narrow(文档位于SDK中)。
  3. 出于显而易见的原因,我会采用前两种选择。