在MFC中经常用到CString类型。也会将其打印到黑窗口上。但是直接用printf或者直接用cout都是不行的。
比如要截取字符串:“bsd_Progress 0 1 2 3 4 0XFF0000 Nil”之“ ”之间的字符串,当然结果为“0”,“1”,“2”,“3”,“4”,“0XFF0000”和"Nil"。可是直接用printf输出时候,代码和运行结果如下,并不尽如人意。
int _tmain(int argc, _TCHAR* argv[], TCHAR* envp[]) { CString sBuf=_T("bsd_Progress 0 1 2 3 4 0XFF0000 Nil "); CString Seperator = _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 ",Token); } system("pause"); return 0; }
然后,去网上查了一下,原来CString不能用printf,需要用cout。那就试试,
int _tmain(int argc, _TCHAR* argv[], TCHAR* envp[]) { CString sBuf=_T("bsd_Progress 0 1 2 3 4 0XFF0000 Nil "); CString Seperator = _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 0 1 2 3 4 0XFF0000 Nil "); 4 CString Seperator = _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