永发信息网

怎么cout<< CString对象

答案:5  悬赏:50  手机版
解决时间 2021-02-22 10:20
  • 提问者网友:王者佥
  • 2021-02-21 22:18
CString str = _T("HeyLook") ;
char *pch = new char[str.GetLength() + 1 ] ;
str.Format(_T("%s"),pch) ;

cout << pch << endl ;

打印是乱码
最佳答案
  • 五星知识达人网友:话散在刀尖上
  • 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之后还没有别的代码覆盖掉那部分内存。 虽然能打印结果,但这就是错误代码
全部回答
  • 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<
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯