使用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, ...
随机推荐
- python week08 并发编程之多线程--理论部分
一. 什么是线程 1.定义 线程就像一条工厂车间里的流水线,一个车间里可以用很多流水线,来执行生产每个零部件的任务. 所以车间可以看作是进程,流水线可以看作是线程.(进程是资源单位,线程是执行单位) ...
- 紫书第三章训练1 D - Crossword Answers
A crossword puzzle consists of a rectangular grid of black and white squares and two lists of defini ...
- onclick跳转到其他页面的几种方式
如果是本页显示可以直接用location,方法如下: ①onclick="javascript:window.location.href='URL'" ②onclick=" ...
- Git使用规范流程(转载)
作者: 阮一峰 日期: 2015年8月 5日 团队开发中,遵循一个合理.清晰的Git使用流程,是非常重要的. 否则,每个人都提交一堆杂乱无章的commit,项目很快就会变得难以协调和维护. 下面是Th ...
- jenkins发送html测试报告
jenkins发送html测试报告 https://blog.csdn.net/galen2016/article/details/77975965/ <!DOCTYPE html> & ...
- openxml的视频教程
http://msdnwebcast.net/webcast/0/1980/#1032360142 最近发现的一个openxml的视频教程
- 根据已知日期(yyyy-MM-dd)获取前n天的日期区间
//获取天 var pubTime="2017-12-30" function buildDay(num){ num=num-1; var myDate = new Date(pu ...
- 写了一个可以个性化设置的仿<select>标签
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- file中的一些常用方法
1.exists();判断文件(目录)是否存在 2.mkdir();创建一级目录:mkdirs()创建多级目录 3.delete();删除文件(目录) 4.isDirectory();判断是否是一个目 ...
- Codeforces 403D: Beautiful Pairs of Numbers(DP)
题意:转换模型之后,就是1~n个数中选k个,放到一个容量为n的背包中,这个背包还特别神奇,相同的物品摆放的位置不同时,算不同的放法(想象背包空间就是一个长度为n的数组,然后容量为1的物体放一个格子,容 ...