我在 GetComputerNameEx
函数中遇到了 More data is available
错误,但不知道如何修复它。
这是我的代码:
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;
}
不知道如何将 size
变量设置为输出,以便我可以正确声明 computerName
数组。
您必须调用该函数两次;一次使用空指针来获得所需的大小,然后再次使用(至少)指定大小的缓冲区。正如文档所说:
To ensure that this buffer is large enough, set this parameter to NULL and use the required buffer size returned in the lpnSize parameter.
这是 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
}
我是一名优秀的程序员,十分优秀!