【发布时间】: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 <atlstr.h>和#include "windows.h"即可使用CString和WinAPI 函数。您将无法使用其他 MFC 功能。删除CWinApp theApp;,删除AfxWinInit... -
只是为了解释发生了什么:
std::ostream有几种指针类型的重载。默认情况下,它使用void const*重载,然后打印十六进制格式的地址。现在,尝试找出您的CString转换为哪种类型,例如使用调试器单步执行。