MFC基础篇--CString的打印输出

    在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

原文地址:https://www.cnblogs.com/xueniwawa/p/3798612.html