string char* char[] char之间的转换

本文详细介绍了C++中字符串(string)与字符数组(char[])之间的多种转换方法,包括使用string类方法、循环赋值、直接赋值及构造函数等方式。文章通过具体代码示例,解释了每种转换方式的特点和注意事项,如手动添加结束符‘’和避免IDE警告等。

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

本文包含以下几种转换:
string-》char* 使用string类方法
string-》char[]使用循环赋值,最后加结尾’\0’
char* char[]-》string 直接赋值
单个字符-》string 详见最后一个例子

一、string转为char char[]*
string转为char 需要自己在数据末尾加’\0’
主要通过string类内部的几个方法来返回数据:data(),c_str(),copy
1、data()方法返回 const char
格式的字符串数据
比如

    string str = "world";
	const char *p = str.data();//要加const或者等号右边用char*
	char *q = (char*)str.data();//同上,要加const或者等号右边用char*
	cout << p << endl << q << endl;
	q[5] = '!'; q[6] = '\0';//手动加结尾
	cout << q << endl;

在这里插入图片描述
根据上面运行结果,可知,通过char转换,可以继续进行后续修改。
2、c_str()方法返回 const char
格式的字符串数据
代码就不贴了,将data()换为c_str()即可,运行结果是一样的

3、copy方法
str.copy(char* dest,int length,int start);第一个参数是目的数组,第二个是数据长度,第三个是数据起始位置。

    string str = "world123";
	char p[6];//此处不能使用char* p;或者char* p="       ";或者char* p="";
	str.copy(p, 5, 0);
	*(p + 5) = '\0';
	cout << p << endl;

以上代码在部分IDE上可能报错C4996,可以通过修改项目属性-C+±预处理器-预处理器定义无视warning,在预处理器定义加上_SCL_SECURE_NO_WARNINGS即可。(想试试copy方法的同学建议试完后改回来)
在这里插入图片描述在这里插入图片描述
注意!本方法需要手动加’\0’,并且不能copy到char*;

二、char、char[]转为string*
直接赋值

 string s1,s2;
 char *p = "hello";//直接赋值
 char q[6]="world";
 s1 = p;
 s2 = q;
 cout << s1 <<endl << s2 << endl ;

在这里插入图片描述
三、string转为char[]
通过string类的length()方法,for循环赋值即可

四、char转为string

//1、构造函数里有个string(size_t,char)
char x = 'a';
string s(1,x); //1表示构造函数需要的x的个数
//2、string初始化没char,但是push_back可以
string s;
char x = 'a';
s.push_back(x);

值得注意的是!string可以直接+ char,也可以直接= char来初始化string,但如果发生以下情况:

int main() {
	string s;
	char x = 'bdsc';//意外的可以运行?
	s+=x;
	cout << s;
}

结果是 发生从“int”到“char”截断在这里插入图片描述在这里插入图片描述
而如果将其中一行代码替换:

char x = 'bdsca';

会报错:
在这里插入图片描述
看来在该环境下,char最多可以容纳4个字符,结合上一个例程提示的 从int”到“char”截断 ,可以推断,char在进行初始化时,接受一个int型(4字节)的数据,并取最后一个字节的数据作为字符。

C++中string char* int 之间的转换方法:
https://blog.youkuaiyun.com/jojozym/article/details/104791775

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值