使用Cout输出String和CString对象

本文详细介绍了在C++编程中如何使用标准输入输出流(如cout和ofstream)输出CString和string对象,分别针对Win32控制台程序、MFC程序和ATL项目的不同需求提供了实例代码解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值