You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GetComputerNameW打印计算机名时输出异常的C语言问题求助

问题原因及解决办法

你的问题出在宽字符字符串的控制台输出兼容上:

  • GetComputerNameW返回的是UTF-16编码的宽字符(wchar_t)字符串,每个字符占2字节,比如D对应的是0x44 0x00。
  • 控制台默认是单字节输出模式,会把宽字符中的0x00当成字符串结束符,所以只打印出第一个字符D。

另外,你的代码没有检查GetComputerNameW的返回值,建议加上错误判断,方便排查调用失败的情况。

两种解决方式:

方式一:转成多字节字符串输出

把宽字符转成系统默认编码的多字节字符串,再用printf输出:

#include <windows.h>
#include <stdio.h>

int main() {
    wchar_t compName[MAX_COMPUTERNAME_LENGTH + 1];
    DWORD maxSize = MAX_COMPUTERNAME_LENGTH + 1;
    BOOL getName = GetComputerNameW(compName, &maxSize);
    
    // 检查API调用是否成功
    if (!getName) {
        printf("获取计算机名失败,错误码:%lu\n", GetLastError());
        return 1;
    }

    // 宽字符转多字节
    char mbCompName[MAX_COMPUTERNAME_LENGTH + 1];
    int convertResult = WideCharToMultiByte(CP_ACP, 0, compName, -1, mbCompName, sizeof(mbCompName), NULL, NULL);
    if (convertResult == 0) {
        printf("字符串转换失败,错误码:%lu\n", GetLastError());
        return 1;
    }

    printf("Computer name is: %s\n", mbCompName);
    return 0;
}

方式二:设置控制台为宽字符输出模式

直接用Windows API的宽字符输出函数,或者设置控制台代码页为UTF-8后用wprintf:

#include <windows.h>
#include <stdio.h>

int main() {
    wchar_t compName[MAX_COMPUTERNAME_LENGTH + 1];
    DWORD maxSize = MAX_COMPUTERNAME_LENGTH + 1;
    BOOL getName = GetComputerNameW(compName, &maxSize);
    
    if (!getName) {
        wprintf(L"获取计算机名失败,错误码:%lu\n", GetLastError());
        return 1;
    }

    // 获取控制台输出句柄,用宽字符函数直接输出
    HANDLE hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
    wchar_t outputBuf[256];
    swprintf(outputBuf, sizeof(outputBuf)/sizeof(wchar_t), L"Computer name is: %s\n", compName);
    WriteConsoleW(hConsoleOut, outputBuf, lstrlenW(outputBuf), NULL, NULL);

    return 0;
}

或者也可以通过设置控制台代码页为UTF-8,然后用wprintf输出:

// 在输出前添加这行代码
SetConsoleOutputCP(CP_UTF8);
wprintf(L"Computer name is: %s\n", compName);

内容的提问来源于stack exchange,提问作者user2494337

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 00:45:36