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

求助:NetUserGetLocalGroups返回内存地址而非LPWSTR字符串(C++ MFC)

解决MFC多字节环境下获取本地组输出内存地址的问题

嘿,第一次在Stack Overflow提问完全不用拘谨~咱们来搞定这个输出内存地址的问题!

你看到的007A1E02这类内容确实是内存地址,核心原因大概率是你直接输出了字符串指针变量本身,而非指针指向的实际组名字符串,再加上多字节字符集的细节没处理到位,才出现了这种情况。

给你几个具体的排查和修复方向:

  • 明确使用API的多字节版本:因为你用的是多字节字符集,调用Windows用户组相关API时,要指定ANSI版本(比如用NetUserGetGroupsA而非宽字符的NetUserGetGroupsW),避免字符类型不匹配导致的指针混乱。
  • 修正输出逻辑:假设你用group_info_1结构体存储组信息,它的grpi1_name成员是指向组名字符串的指针。如果你的sysout直接输出这个指针变量(比如sysout(pGroups[i].grpi1_name)),打印的就是指针的内存地址。你需要输出指针指向的字符串内容——如果sysout是对cout的封装,直接输出指针指向的内容即可:
    // 错误示例:输出指针地址
    // sysout(pGroups[i].grpi1_name);
    // 正确示例:输出实际组名
    sysout(pGroups[i].grpi1_name); // 确保sysout支持处理LPSTR类型的多字节字符串
    
  • 完整示例参考:这里给你一段修正后的核心代码片段,供你对照:
    #include <lmaccess.h>
    #pragma comment(lib, "netapi32.lib")
    
    void test() {
        group_info_1* pGroups = nullptr;
        DWORD dwLevel = 1;
        DWORD dwEntriesRead = 0;
        DWORD dwTotalEntries = 0;
        // 获取当前登录用户名(多字节版本)
        char szUserName[UNLEN + 1] = {0};
        DWORD dwUserNameLen = UNLEN + 1;
        GetUserNameA(szUserName, &dwUserNameLen);
    
        // 调用ANSI版本API获取用户组
        NET_API_STATUS nStatus = NetUserGetGroupsA(nullptr, szUserName, dwLevel, (LPBYTE*)&pGroups, MAX_PREFERRED_LENGTH, &dwEntriesRead, &dwTotalEntries, nullptr);
    
        if (nStatus == NERR_Success) {
            for (DWORD i = 0; i < dwEntriesRead; i++) {
                // 输出实际组名字符串,而非指针地址
                sysout(pGroups[i].grpi1_name);
            }
            // 记得释放API分配的内存
            NetApiBufferFree(pGroups);
        } else {
            sysout("获取用户组失败,错误码:" + std::to_string(nStatus));
        }
    }
    
  • 检查sysout的实现:如果调整后还是输出地址,那可能是sysout函数的问题——比如它默认把传入的指针当作整数输出了。你可以临时替换成std::cout << pGroups[i].grpi1_name << std::endl;测试,确认能正常输出组名后,再调整sysout的实现以支持多字节字符串。

另外,别忘了调用NetApiBufferFree释放API分配的内存,避免内存泄漏哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:34:18