• 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

  • 相关阅读:
    Hostker云主机
    Orz 终于有了自己的博客地址
    BZOJ 1635: [Usaco2007 Jan]Tallest Cow 最高的牛
    BZOJ 1636: [Usaco2007 Jan]Balanced Lineup
    BZOJ 2252: [2010Beijing wc]矩阵距离
    BZOJ 2253: [2010 Beijing wc]纸箱堆叠
    BZOJ 无数据题集合
    BZOJ 1087: [SCOI2005]互不侵犯King
    BZOJ 3236: [Ahoi2013]作业
    POJ2352:Stars
  • 原文地址:https://www.cnblogs.com/xueniwawa/p/3798612.html
Copyright © 2020-2023  润新知