错误234"使用GetComputerNameEx可获得更多数据"

Ser*_*ron 1 c string winapi

我收到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正确声明数组.

Jon*_*ter 5

你必须两次调用该函数; 一次使用空指针获取所需大小,并再次使用(至少)指定大小的缓冲区.正如文档所说:

要确保此缓冲区足够大,请将此参数设置为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)