CString str = _T("HeyLook") ;
char *pch = new char[str.GetLength() + 1 ] ;
str.Format(_T("%s"),pch) ;
cout << pch << endl ;
打印是乱码
怎么cout<< CString对象
答案:5 悬赏:50 手机版
解决时间 2021-02-22 10:20
- 提问者网友:王者佥
- 2021-02-21 22:18
最佳答案
- 五星知识达人网友:话散在刀尖上
- 2021-02-21 22:47
如果你开了 Unicode选项的话, 可以用wcout打印
CString str = _T("HeyLook") ;
wcout << (PCXSTR) str <
这个强制类型转换忘记了需要不需要的了。。
如果想学微软试图维护两个版本的程序, 可以先define一下:
#ifdef UNICODE
#define TCOUT wcout
#else
#define TCOUT cout
#endif
打印的时候就 TCOUT << (PCXSTR)str<
上面的两个回答都是错误的。
首先 char *pch = new ....;
pch = str.GetBuffer(0) 这两句造成内存泄漏。
其次 str.ReleaseBuffer调用后 pch指向的内存立刻被释放, 在这之后调用 cout << pch <
上面的程序确实能打印出结果是因为Release之后还没有别的代码覆盖掉那部分内存。 虽然能打印结果,但这就是错误代码
CString str = _T("HeyLook") ;
wcout << (PCXSTR) str <
如果想学微软试图维护两个版本的程序, 可以先define一下:
#ifdef UNICODE
#define TCOUT wcout
#else
#define TCOUT cout
#endif
打印的时候就 TCOUT << (PCXSTR)str<
上面的两个回答都是错误的。
首先 char *pch = new ....;
pch = str.GetBuffer(0) 这两句造成内存泄漏。
其次 str.ReleaseBuffer调用后 pch指向的内存立刻被释放, 在这之后调用 cout << pch <
全部回答
- 1楼网友:往事隔山水
- 2021-02-22 02:10
不用那么麻烦吧, 直接cout<<str.GetBuffer(str.GetLength())<<endl;就好了嘛
- 2楼网友:醉吻情书
- 2021-02-22 01:53
#include
#include
int main()
{
CString str = _T("HeyLook");
char *pch = str.GetBuffer(0);
cout << pch << endl ;
str.ReleaseBuffer();
return 0;
};
- 3楼网友:刀戟声无边
- 2021-02-22 01:04
CString str = _T("HeyLook") ;
char *pch = new char[str.GetLength() + 1 ] ;
// str.Format(_T("%s"),pch) ;
pch = str.GetBuffer();
str.ReleaseBuffer();
cout << pch << endl ;
你str.format用法错误。pch没有指向特定地址。改成上面的就好了。
- 4楼网友:夜风逐马
- 2021-02-21 23:32
楼上的基本正确,我增加了些细节的东西,在VC6成功运行。
下面是在VC里建的Win32 Console程序,需要在project--settings---general--Microsoft Fundation Classes选Using MFC in a shared DLL
#include
#include
using namespace std;
void main(void)
{
CString str=_T("HeyLook");
char *pch =new char[str.GetLength()+1];
pch=str.GetBuffer(0);//0小于str实际长度,GetBuffer此时会按str实际长度作为缓冲区长度
str.ReleaseBuffer(); //调用GetBuffer后一定要调用ReleaseBuffer
cout<
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯