【问题标题】:CString object always return pointer valueCString 对象总是返回指针值
【发布时间】:2025-12-16 07:40:01
【问题描述】:

在visual studio 2015环境下,我只是做了一个简单的Win32控制台应用程序项目来学习MFC。 (另外,我检查了在项目向导过程中添加 MFC 的通用头文件)

这是这个项目的主要部分..

#include "stdafx.h"
#include "Practice02.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

CWinApp theApp;

using namespace std;

int main()
{
    int nRetCode = 0;

    HMODULE hModule = ::GetModuleHandle(nullptr);

    if (hModule != nullptr)
    {
        if (!AfxWinInit(hModule, nullptr, ::GetCommandLine(), 0))
        {
            wprintf(L"error: sample\n");
            nRetCode = 1;
        }
        else
        {
            CString temp(L"Hello");
            cout << temp << endl;
        }
    }
    else
    {
        wprintf(L"Fatal Error: GetModuleHandle failure\n");
        nRetCode = 1;
    }

    return nRetCode;
}

我的目的是制作一个简单的程序,在 cmd 屏幕上打印包含“hello”值的 CString 对象。

但是,启动这个项目后,我只看到这个对象的地址值。 (例如 0039841 或 003913E1 等...)

我应该在哪里修改此代码以打印 CString 对象的实际值?

【问题讨论】:

  • 你的 CStrings 很宽,因为你正在编译 _UNICODE 定义,打印到 wcout 代替。
  • 是的,这个项目使用 UNICODE 设置。而且,我将代码从“cout
  • 我无法理解这一点。对于控制台程序,您可以创建控制台项目。添加#include &lt;atlstr.h&gt;#include "windows.h" 即可使用CString 和WinAPI 函数。您将无法使用其他 MFC 功能。删除CWinApp theApp;,删除AfxWinInit ...
  • 只是为了解释发生了什么:std::ostream 有几种指针类型的重载。默认情况下,它使用void const* 重载,然后打印十六进制格式的地址。现在,尝试找出您的 CString 转换为哪种类型,例如使用调试器单步执行。

标签: c++ mfc


【解决方案1】:

使用以下:

std::wcout << temp.GetString();

【讨论】:

  • 正是我要找的!谢谢,:) 但是,我能问你这个改变是如何让对象引用真正的价值吗?
  • @구마왕 CString 内部有 char* 或 wchar*。 GetString 返回 const wchar_t* 并且适用于 wcout。