使用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, ...
随机推荐
- Leetcode 462.最少移动次数使数组元素相等
最少移动次数使数组元素相等 给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1. 您可以假设数组的长度最多为10000. 例如: 输入: [1,2, ...
- linux下文件显示被加锁如何解决?
1.很多时候从别的机器上拷贝过来的文件,没有权限打开,上面有一个小锁. 2.判断是权限没有,查询ls -al得知文件的的所有者,和所有者在的组都不是本机 3.使用chown改变用户的所有者和所有者所在 ...
- API生命周期第三阶段:API实施模式,以及结合swagger和项目现状的最佳模式
这篇博客,主要是宏观介绍一下开发模式,尤其是针对于目前公司前后分离的项目! 一.API实施模式概述 API实施模式,主要是三个,其中API-First又是作为一种指导思想的一种,所以,简单来说事实实施 ...
- 利用hibernate与struts框架制作简单注册界面
一:配置hibernate 1.导包 hibernate包和jdbc连接mysql数据库的包 2.实用工具生成hibernate配置文件和映射文件 3.做好hibernateUtil生成session ...
- pytorch conditional GAN 调试笔记
推荐的几个开源实现 znxlwm 使用InfoGAN的结构,卷积反卷积 eriklindernoren 把mnist转成1维,label用了embedding wiseodd 直接从tensorflo ...
- CS231n笔记 Lecture 4 Introduction to Neural Networks
这一讲主要介绍了神经网络,基本内容之前如果学习过Andrew的Machine learning应该也都有所了解了.不过这次听完这一讲后还是有了新的一些认识. 计算图 Computational gra ...
- java maven项目testng执行时使用的是test-classes下的文件,共享main下方resource的配置
在pom.xml中配置 <build> <testResources> <testResource> <directory>${project.base ...
- bzoj 2803 [POI2012]prefixuffix hsh+性质
题目大意 bzoj 2803 对于两个串S1.S2,如果能够将S1的一个后缀移动到开头后变成S2,就称S1和S2循环相同.例如串ababba和串abbaab是循环相同的. 给出一个长度为n的串S,求满 ...
- Introduction to the WinPcap Networking Libraries
Introduction to the WinPcap Networking Libraries use wire shark or fiddler
- Linux 之 网络相关设置
网络相关设置 参考教程:[千峰教育] 命令: ping: 作用:通常用于检测网络设备的连通性. 格式:ping IP/域名 选项:-c,指定方式测试数据包的次数 实例:ping www.baidu.c ...