[英]C++ char conversion
我現在用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
?
結果host_val
是一個可能為非空終止的字符串 (請參見“備注”),因此您應使用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
。
使用函數的ANSI版本
RegQueryValueExA
這樣,您就無需轉換。
如果使用Unicode進行編譯,則會將Unicode字符串(可能未終止)復制到狹窄的char緩沖區中。 unicode字符串中的第一個字符將是0x3100(說明您計算機上的字節序,這可能是小字節序,並且您說的IP地址是192 ....)
填充到char []數組中的值將以單char-null終止的字符串形式返回。 您有兩個選擇。
出於明顯的原因,我會選擇這兩個選項中的前一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.