CString、string和char之间的类型转换

本文详细介绍了在C++中如何进行CString、string和char之间的相互转化,包括各种转化方法和注意事项,如CString转string需要通过c_str(),而char*作为不同类型的桥梁在转化中起到关键作用。此外,还提到了不同类型间转化的通用策略,以及在VS环境下防止栈溢出的设置建议。

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

0. 题外话

由于最近完成一个工程时候总是涉及到类型转换,然后总是出现转换后编译出错或者中文乱码情况,内心有点崩溃,所以就出了这个总结~希望以后遇到类型转换这块就比较熟练啦~

1. 前言

首先要意识到一点:CString、string、char*和char[]是不同玩意儿~

特别的是string和char*不能直接转的!

1)char*和char[]的区别

可能需要的一些小知识:
数据在内存中的存储区域 
*栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 
*堆:就是那些由new或malloc分配的内存块,在不适用时,要手动用delete或free来释放内存区域。
*全局/静态存储区:全局变量和静态变量被分配到同一块内存中,他们共同占用同一块内存区。 
*常量存储区:这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多) 

如果用字符串直接对char*赋值,那么相当于该char*类型指针指向一个常量字符串,分配的内存为常量存储区,所以不允许修改。

但如果用字符串对char[]赋值,那么其分配的内存为栈,所以可以修改。如果用char[]类型的变量赋值给char*,那么此时char*指向的内存为栈,所以可以修改。

2)char和string的区别

在C++中,string有两种,一种是字符串char[],另外一种是封装好的字符串类,要区别理解。例如’a’是char, "a"是char string,这两者都是普通的字符和字符串,和C语言中没什么不同值得注意的是后者包含两个字符,末尾有一个隐身的’\0’
而 string str = “a” 是C++ 封装好的string。C++中的char string和string不是一回事。

当用到了"string"这个关键词,就不是普通的字符串,而是用到了封装后的类。

在C++中,char仍然是一个primitive type(原始类型),而string已经经过封装,成为了一个class(类)用到它时,我们需要 #include <string>,它是C++ Standard Library (C++标准库)的一部分。

3)CString和string的区别

CString是属于MFC的类,因此一些标准C/C++库函数是不能对CString类型操作,so需要将CString类型转化为char*等其他数据类型的情况。

首先要明确,标准C中是不存在string类型的,string是标准C++扩充字符串操作的一个类。
但是我们知道标准C中有string.h这个头文件,这里要区分清楚,此string非彼string。
string.h这个头文件中定义了一些我们经常用到的操作字符串的函数,如:strcpy、strcat、strcmp等等,但是这些函数的操作对象都是char*指向的字符串。
而C++的string类操作对象是string类型字符串,该类重装了一些运算符,添加了一些字符串操作成员函数,使得操作字符串更加方便。
有的时候我们要将string串和char*串配合使用,所以也会涉及到这两个类型的转化问题。

原文:https://blog.youkuaiyun.com/bitxinhai/article/details/2292014 
2. 类型转化
2.1 CString和string的相互转化

1)string 转 CString

string str = "testString";
// 方式一
CString cstr(str.c_str());
// 或CString cstr(str.data());

// 方式二
cstr = str.c_str();
// 或cstr = str.data()

// 方式三 这种输出结果会乱码 原因有待研究
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值