使用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转换为CStringCout<<(CT2A)sContext //使用CT2A宏来输出sContext的内容 |
从上面的示例代码我们了可以知道:
在ATL项目中,可以使用CT2A宏来输出CString对象
使用Cout输出String和CString对象的更多相关文章
- C++中关于string类型究竟能不能用cout输出的问题
先让我讲下故事哈 一次在MFC中用cout输出一个string类型字符串,编译时出现这样一个错误: error C2679: binary '<<' : no operator defin ...
- 控制台console使用MFC库函数,Cout输出CString的方法
新建工程的时候选择:Win32 Console Application 在向导的地方勾选MFC头文件支持,确认即可 等待初始化文件完成后,VS2010会自动打开 项目名.cpp的文件 其中int _t ...
- PAT 甲级 1047 Student List for Course (25 分)(cout超时,string scanf printf注意点,字符串哈希反哈希)
1047 Student List for Course (25 分) Zhejiang University has 40,000 students and provides 2,500 cou ...
- cout输出字符串指针
先给出通过字符型指针输出字符串的示例代码,如下: #include <iostream>using std::cout;using std::endl; int main(){ const ...
- Java中直接输出一个类的对象
例如 package com.atguigu.java.fanshe; public class Person { String name; private int age; public Strin ...
- MFC中char*,string和CString之间的转换
MFC中char*,string和CString之间的转换 一. 将CString类转换成char*(LPSTR)类型 方法一,使用强制转换.例如: CString theString( &q ...
- Cpp读文件、CString转String、String转CString
场景 C++读取文件 技术点 读取文件 fstream提供了三个类,用来实现c++对文件的操作.(文件的创建.读.写). ifstream -- 从已有的文件读入 ofstream -- 向文件写内容 ...
- (转)Java 中关于String的空对象(null) ,空值(empty),空格
原文出处:Java 中关于String的空对象(null) ,空值(empty),空格 定义 空对象: String s = null; 空对象是指定义一个对象s,但是没有给该对象分配空间,即没有实例 ...
- string与CString对比
string是标准C++库中的字符串类,CString是在Windows开发环境下常用的字符串类,CString目前已从MFC中分离出来可以单独使用,只需包含atlstr.h即可. 相比string, ...
随机推荐
- 大数据学习——spark运营案例
iplocation需求 在互联网中,我们经常会见到城市热点图这样的报表数据,例如在百度统计中,会统计今年的热门旅游城市.热门报考学校等,会将这样的信息显示在热点图中. 因此,我们需要通过日志信息(运 ...
- ptyhon - 接口自动化测试实战case1
work_20181203_httprequest.py: import requestsclass http_request: def http_get(url,params): res = req ...
- python - 字符串的格式化输出
# -*- coding:utf-8 -*- '''@project: jiaxy@author: Jimmy@file: study_2_str.py@ide: PyCharm Community ...
- python3--类与继承和组合
类和继承:“是一个”关系 我们已经深入探索了继承的机制,这里举个例子来说明它是如何用于模拟真实世界的关系的.从程序员的角度来看,继承是由属性点号运算启动的,由此触发实例.类以及任何超类中的变最名搜索. ...
- webapi同时支持post和get报404错误
文章:webapi设置一个Action同时支持get和post请求 这篇文章,有提供方法.参数前加上[FromUri] [AcceptVerbs("GET", "POST ...
- 修改mysql数据的字符集校验规则使其区分大小写
mysql 使用utf8字符集默认的校验规则collate为utf8_general_ci,不区分数据的大小写 测试如下 ::) character set utf8 collate utf8_bin ...
- HDU——2723Electronic Document Security(STL map嵌套set做法)
Electronic Document Security Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- 如何回答“线上CPU100%排查”面试问题
案例: public class App { public static void main( String[] args ) { int a = 0; while (a < 100) { a ...
- java面试题之volatile的工作原理
volatile的特性: volatile可见性:对一个volatile的读,总可以看到对这个变量最终的写: volatile原子性:volatile对单个读/写具有原子性(32位Long.Doubl ...
- [暑假集训--数位dp]LightOj1032 Fast Bit Calculations
A bit is a binary digit, taking a logical value of either 1 or 0 (also referred to as "true&quo ...