标签:style blog http color get 2014
在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
MFC基础篇--CString的打印输出,布布扣,bubuko.com
标签:style blog http color get 2014
原文地址:http://www.cnblogs.com/xueniwawa/p/3798612.html