【C++】C++中string和char*的相互转换


前言

string和char*,作为C++中常用的数据类型,经常需要进行相互转换,故此总结转换方法。

一、std::string 转 char*

1.使用string的data方法

	string str = "hello world!";
	const char *p1 = str.data();
	cout << p1 << endl;

2.使用string的c_str方法``

	string str = "hello world!";
	char *p2 = const_cast<char*>(str.c_str());
	cout << p2 << endl;

3. 使用string的copy方法

	string str="hello world";
	char *p4;
	int len = str.length();
	p4 = (char *)malloc((len + 1) * sizeof(char));
	str.copy(p4, len, 0);
	*(p4 + len) = '\0';

4.使用vector方法

string str="hello world";
vector<char> chars(str.begin(), str.end());
chars.push_back('\0');
char *p6 = &chars[0];

5.使用string的连续存储功能

string str="hello world";
char* p7 = &*str.begin();
std::cout << p7<<endl;

二、char* 转std::string

   const char* s = "test";
	string str1 = s;
	cout<<str1<< endl;

	char s1[20] = "test char trans";
	string str2 = s1;
	cout << str2 << endl;

三、示例程序

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main()
{	
	//string转char*5
	string str = "hello world!";
	//1.data
	const char *p1 = str.data();
	cout << p1 << endl;
	//2.c_str
	char *p2 = const_cast<char*>(str.c_str());
	cout << p2 << endl;
	//3.copy
	char p3[20];
	str.copy(p3, 5, 0); //这里5,代表复制几个字符,0代表复制的位置
	*(p3+5) = '\0'; //要手动加上结束符
	cout << p3 << endl;
	char *p4;
	int len = str.length();
	p4 = (char *)malloc((len + 1) * sizeof(char));
	str.copy(p4, len, 0);
	*(p4 + len) = '\0';
	cout << p4 << endl;

	char *p5 = new char[str.length() + 1];
	strcpy_s(p5,str.length() + 1, str.c_str());
	cout << p5<<endl;

	vector<char> chars(str.begin(), str.end());
	chars.push_back('\0');

	char *p6 = &chars[0];
	cout << p6<<endl;
	
	char* p7 = &*str.begin();
	std::cout << p7<<endl;

	const char* s = "test";
	string str1 = s;
	cout<<str1<< endl;

	char s1[20] = "test char trans";
	string str2 = s1;
	cout << str2 << endl;

	system("pause");
}

四、测试结果

在这里插入图片描述

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shanhedian2013

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值