首页 > 代码库 > MFC基础篇--CString的打印输出
MFC基础篇--CString的打印输出
在MFC中经常用到CString类型。也会将其打印到黑窗口上。但是直接用printf或者直接用cout都是不行的。
比如要截取字符串:“bsd_Progress\t0\t1\t2\t3\t4\t0XFF0000\tNil”之“\t”之间的字符串,当然结果为“0”,“1”,“2”,“3”,“4”,“0XFF0000”和"Nil"。可是直接用printf输出时候,代码和运行结果如下,并不尽如人意。
int _tmain(int argc, _TCHAR* argv[], TCHAR* envp[]){ CString sBuf=_T("bsd_Progress\t0\t1\t2\t3\t4\t0XFF0000\tNil "); CString Seperator = _T("\t"); int Position = 0; CString Token; Token = sBuf.Tokenize(Seperator, Position); while(!Token.IsEmpty()) { // Get next token. Token = sBuf.Tokenize(Seperator, Position);//从iStart位置取出字符串中含pszTokens分割符间的内容; printf("%s\n",Token); } system("pause"); return 0;}
然后,去网上查了一下,原来CString不能用printf,需要用cout。那就试试,
int _tmain(int argc, _TCHAR* argv[], TCHAR* envp[]){ CString sBuf=_T("bsd_Progress\t0\t1\t2\t3\t4\t0XFF0000\tNil "); CString Seperator = _T("\t"); int Position = 0; CString Token; Token = sBuf.Tokenize(Seperator, Position); while(!Token.IsEmpty()) { // Get next token. Token = sBuf.Tokenize(Seperator, Position);//从iStart位置取出字符串中含pszTokens分割符间的内容; std::wcout<<Token<<std::endl; } system("pause"); return 0;}
但结果却是一堆乱码:
后来发现,需要将CString转换成TCHAR*类型,才能够输出正确。
1 int _tmain(int argc, _TCHAR* argv[], TCHAR* envp[]) 2 { 3 CString sBuf=_T("bsd_Progress\t0\t1\t2\t3\t4\t0XFF0000\tNil "); 4 CString Seperator = _T("\t"); 5 int Position = 0; 6 CString Token; 7 8 Token = sBuf.Tokenize(Seperator, Position); 9 while(!Token.IsEmpty())10 {11 // Get next token.12 Token = sBuf.Tokenize(Seperator, Position);//从iStart位置取出字符串中含pszTokens分割符间的内容;13 14 TCHAR* szTrunc = new TCHAR[Token.GetLength() + 1];//将结果保存在堆里15 _tcscpy(szTrunc,Token);//结果拷贝16 17 std::wcout<<szTrunc<<std::endl;18 19 if (_tcslen(szTrunc) > 0)20 {21 delete [] szTrunc;22 }24 } 25 system("pause");26 return 0;27 }
O(∩_∩)O哈哈~ok
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。