zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Fiddler: Creation of interception certificate failed.
    ip地址检查正则表达式 兼容ipv4,ipv6
    母版页与子页的启动过程
    erlang 读取confg文件异常 could not start kernel pid error in config file
    转义字符 显示形式 转换成 实际形式 \\n to \n
    How to use epoll? A complete example in C
    Lex & Flex 词法分析器实践(未完,持续更新)
    我理解的爱情———柳智宇 (转载)
    Learning by doing 系列文章概述
    锁与RCU数据共享机制
  • 原文地址:https://www.cnblogs.com/xueniwawa/p/3798612.html
Copyright © 2011-2022 走看看