我正在尝试创建一个返回计算机名称的函数。这是我到目前为止:
char* getName()
{
char buffer[MAX_COMPUTERNAME_LENGTH + 1];
DWORD length = sizeof(buffer);
GetComputerNameEx((COMPUTER_NAME_FORMAT)0, buffer, &length);
return buffer;
}
Run Code Online (Sandbox Code Playgroud)
但它并没有真正起作用。似乎它返回一个带有非常奇怪的字符编码的字符串。我将不胜感激所有帮助。
使用 anstd::string来避免内存问题。而作为std::string使用单字节字符,你应该使用单字节版本GetComputerNameEx,GetComputerNameExA。
检查错误值也是一个好主意,因为文档明确指出计算机名称可能长于 MAX_COMPUTERNAME_LENGTH。
std::string getName()
{
char buffer[MAX_COMPUTERNAME_LENGTH + 1];
DWORD length = sizeof(buffer);
bool ok = GetComputerNameExA((COMPUTER_NAME_FORMAT)0, buffer, &length);
if (ok) {
return buffer;
} else {
//handle error
}
}
Run Code Online (Sandbox Code Playgroud)
或者您可以使用宽版:
std::wstring getName()
{
wchar_t buffer[MAX_COMPUTERNAME_LENGTH + 1];
DWORD length = sizeof(buffer) / sizeof(wchar_t);
bool ok = GetComputerNameExW((COMPUTER_NAME_FORMAT)0, buffer, &length);
if (ok) {
return buffer;
} else {
//handle error
}
}
Run Code Online (Sandbox Code Playgroud)
或者制作一个在两种环境下都可以使用的代码(来自这里的想法):
std::basic_string<TCHAR> getName()
{
TCHAR buffer[MAX_COMPUTERNAME_LENGTH + 1];
DWORD length = sizeof(buffer) / sizeof(TCHAR);
bool ok = GetComputerNameEx((COMPUTER_NAME_FORMAT)0, buffer, &length);
if (ok) {
return buffer;
} else {
//handle error
}
}
Run Code Online (Sandbox Code Playgroud)