我试图创建一个返回计算机名称的函数。这就是我到目前为止所做的:
char* getName()
{
char buffer[MAX_COMPUTERNAME_LENGTH + 1];
DWORD length = sizeof(buffer);
GetComputerNameEx((COMPUTER_NAME_FORMAT)0, buffer, &length);
return buffer;
}
但它并没有真正起作用。它似乎返回一个非常奇怪的字符编码字符串。我将非常感谢你的帮助。
答案 0 :(得分:4)
使用std::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
}
}
或者你可以使用宽版本:
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
}
}
或制作在两种环境下都有效的代码(来自here的想法):
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
}
}