我收到More data is available
错误的GetComputerNameEx
功能,但不知道如何解决它.
这是我的代码:
int wmain()
{
COMPUTER_NAME_FORMAT nameType = ComputerNameDnsFullyQualified;
WCHAR computerName[MAX_COMPUTERNAME_LENGTH + 1];
DWORD size = ARRAYSIZE(computerName);
BOOL pcName = GetComputerNameEx(nameType, computerName, &size);
DWORD error = GetLastError();
if (pcName != 0)
{
wprintf("Computer name: %s\n", computerName);
}
else
{
wprintf(L"Error getting the name. Code: %li\n", error);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
不知道如何将size
变量设置为输出,因此我可以computerName
正确声明数组.
你必须两次调用该函数; 一次使用空指针获取所需大小,并再次使用(至少)指定大小的缓冲区.正如文档所说:
要确保此缓冲区足够大,请将此参数设置为NULL并使用lpnSize参数中返回的所需缓冲区大小.
这是Win32函数的常见模式.是的,它确实会导致可能的竞争条件,但这就是它的工作原理.
例
DWORD dwSize = 0;
if (GetComputerNameEx(nameType, nullptr, &dwSize))
{
WCHAR* computerName;
computerName = (WCHAR*)malloc(dwSize * sizeof(WCHAR));
if (GetComputerNameEx(nameType, computerName, &dwSize))
{
// use the name
}
free(computerName); // don't forget to free
}
Run Code Online (Sandbox Code Playgroud)