zoukankan      html  css  js  c++  java
  • 使用Cout输出String和CString对象

    CString和string都是一个类,不同的是CString主要用于MFC或者是ATL编程中,而string则多用于Windows控制台编程中

        在实际编程过程中,我们经常用到string或者是CString来保存数据,保存数据的同时,我们也希望把这些保存的数据能够使用输入输出流给输出出来,不过是我们使用Cout标准输出到屏幕,还是使用ofstream输出到文件,我们都需要输出这些对象保存的数据

       在实际过程中,我们会遇到三种情况,下面结合遇到的三种情况来说明下如何将CString或者是string对象使用标准的输入输出流输出,特别注意,这里我们讨论的是输入输出流,printf不再讨论之列

    1.win32控制台程序:

    在Win32控制台程序中,我们如果要使用string的话,需要包含头文件:string或者是命名空间:cstring:

    1
    2
    #include <string.h>
    #include <cstring>

    如果我们直接使用下面的方式输出string的话,在编译时会报错:

    1
    2
    string sTest = "Hello World";
    cout<<sTest<<endl;

    错误的提示可能很多,但是根本的原因是sTest是string的一个对象,而string没有对”<<“进行运算符重载,那么肯定是不能输出的 那么我们可以使用string的成员函数来输出string对象的内容:

    1
    2
    string sTest = "Hello World";
    cout<<sTest.c_str()<<endl; //使用了string的成员函数c_str();

    因此,我们可以得出:

    在WIN32控制台中,我们可以使用string的c_str()成员函数类标准输出string的数据内容

    2.在MFC程序中:

    在MFC中,我们很少用到Cout来输出,用的比较多的输出是文件流输出,因此我们就以文件流的输出CString对象来举例:

    1
    2
    3
    CString sTest = _T("Hello World");
    ofstream OutToFile("E:\Users\Admin\Desktop\test.txt",ios::app);
    OutToFile<<sTest<<endl;

    上面的例子可以看出,我们可以直接对CString对象进行文件流输出, 但是如果有的MFC程序不支持的话,那么我们需要使用下面的方法来输出CString对象:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CString sTest = _T("Hello World");
     
    ofstream OutToFile("E:\Users\Admin\Desktop\test.txt",ios::app);
     
    wchar_t * chTest = new wchar_t[sTest.GetLength()+1]; //动态申请空间
    chTest = sTest.GetBuffer(0); //获取CString内容的地址
     
    for(int i = 0; i<sTest.GetLength();i++){
        OutToFile<<(char)*(chTest+i);
    }
    sTest.ReleaseBuffer();    //调用了GetBuffer后一定要调用ReleaseBuffer释放,否则会出现内存泄露
    OutToFile.close();

    我们使用CString的GetBuffer得到数据的地址,然后直接输出就可以了

    3.ATL项目中

    前面有提到过ATL项目,他不同于MFC那么方便,要想输出CString对象的话,需要是用到ATL的宏,

    1
    2
    3
    4
    BSTR bstrContext = OLESTR(" 内容为:");  //使用宏OLESTR对BSTR变量赋初值
    CString sContext ;
    sContext = COLE2T(bstrContext);  //使用COLE2T将BSTR转换为CString
    Cout<<(CT2A)sContext  //使用CT2A宏来输出sContext的内容

    从上面的示例代码我们了可以知道:

    在ATL项目中,可以使用CT2A宏来输出CString对象

  • 相关阅读:
    洛谷P3747 [六省联考2017]相逢是问候
    染色(dye)
    BZOJ1426: 收集邮票
    消息队列RabbitMQ
    CRM
    BBS
    版本控制
    RESTful API
    Luffy
    axios使用
  • 原文地址:https://www.cnblogs.com/hushaojun/p/4920151.html
Copyright © 2011-2022 走看看