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

如何用std::cout输出CString变量而非其内存地址?

解决CString输出内存地址而非字符串内容的问题

出现这个问题的核心原因是:标准库的cout没有为MFC的CString类重载<<输出运算符,所以默认会输出对象的内存地址。以下是几种直接有效的解决方式:

方法1:显式转换为C风格字符串

CString内置了到LPCTSTR的隐式转换(也可以调用GetString()方法),转换后cout就能正确识别并输出字符串内容:

CString a = "a";
CStringArray arr;
arr.Add(a);

cout << (LPCTSTR)a << endl;
cout << (LPCTSTR)arr[0] << endl;

// 或者调用GetString()方法,效果一致
cout << a.GetString() << endl;
cout << arr[0].GetString() << endl;

方法2:适配Unicode字符集(宽字符场景)

如果你的MFC项目是Unicode字符集(默认配置),CString实际是CStringW(宽字符串类型),此时用wcout替代cout能更好适配:

CString a = L"a"; // 宽字符常量需加前缀L
CStringArray arr;
arr.Add(a);

wcout << (LPCWSTR)a << endl;
wcout << (LPCWSTR)arr[0] << endl;

方法3:重载输出运算符(一劳永逸)

如果需要频繁输出CString,可以全局重载std::ostream的<<运算符,之后就能直接用cout输出CString:

#include <iostream>
#include <afx.h>

std::ostream& operator<<(std::ostream& os, const CString& str)
{
    os << (LPCTSTR)str;
    return os;
}

// 后续直接使用即可
int main()
{
    CString a = "a";
    CStringArray arr;
    arr.Add(a);

    cout << a << endl;
    cout << arr[0] << endl;
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:32:08