首页 > 代码库 > 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