栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++: 字符串string、char *、char[]相互转换

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++: 字符串string、char *、char[]相互转换

C++: 字符串string、char *、char[]相互转换

亲测过。这字符串转换真心纠结

#include 
#include 

using namespace std;



int main()
{
	char str1[] = { "abcd" };
	char str2[4] = { 'a','b','c',0 };
	char str3[4] = { 'a','b','c','d' };//单纯的字符数组,这种字符数组,因为末尾没有0,所以把他当作字符串直接输出就会有内存里其他数据,就出现了“烫”。。

	char* str4 = new char[4]{ 'a','b','c',0 }; //字符指针,指向字符的指针
	const char* str5 = "abcd";//这是一个常量,当你对这个数据的内存操作的时候就会报错
	//char* str6 = "abcd";  //error ,const char*类型的值不能用作char*的初始化

	cout << "str1:" << str1 << endl;
	cout << "str2:" << str2 << endl;
	cout << "str3:" << str3 << endl;
	cout << "str4:" << str4 << endl;
	cout << "str5:" << str5 << endl;

	//输出:
	//str1:abcd
	//str2 : abc
	//str3 : abcd烫烫烫烫abc
	//str4 : abc
	//str5 : abcd

	cout << "********************string、char *、char[]相互转换******************************" << endl;
	//*******************string、char *、char[]相互转换***************************
	
	
	//############# string 转 char* #####################
	cout << "############# string 转 char* #####################" << endl;
	string data1 = "helloworld";
	const char* data2 = data1.c_str();
	const char* data3 = data1.data();
	//char* data11 = data1.c_str();//不允许const转换成char *
	cout << "data1:" << data1 << endl;
	cout << "data2:" << data2 << endl;
	cout << "data3:" << data3 << endl;
	cout << endl;

	//############# const char* 转 string #####################
	cout << "############# const char* 转 string #####################" << endl;

	string data4;
	const char* data5= "helloworld";
	data4 = data5;

	cout << "data4:" << data4 << endl;
	cout << "data5:" << data5 << endl;
	cout << endl;

	//############# char* 转 string #####################
	cout << "############# char* 转 string #####################" << endl;

	string data6;
	char* data7 = new char[10]{ 'a','b','c',0 };//new/delete、new[]/delete[] 要配套使用
	data6 = data7;

	cout << "data6:" << data6 << endl;
	cout << "data7:" << data7 << endl;
	cout << endl;
	delete[] data7;
	//############# char[] 转 string #####################
	cout << "############# char[] 转 string #####################" << endl;
	
	string data8;
	char data9[] = "helloworld";
	data8 = data9;

	cout << "data8:" << data8 << endl;
	cout << "data9:" << data9 << endl;
	cout << endl;

	//############# string 转 char[] #####################
	cout << "############# string 转 char[] #####################" << endl;
	string data10 = "helloworld";
	char data11[20];
	int i;
	for (i = 0; i < data10.length(); i++)
	{
		data11[i] = data10[i];
	}
	data11[i] = '';

	cout << "data10:" << data10 << endl;
	cout << "data11:" << data11 << endl;
	cout << endl;

	//############# char[] 转 char* #####################
	cout << "############# char[] 转 char* #####################" << endl;
	char data14[20] = "helloworld";
	char* data15 = data14;

	cout << "data14:" << data14 << endl;
	cout << "data15:" << data15 << endl;
	cout << endl;


	//############# char* 转 char[] #####################
	cout << "############# char* 转 char[] #####################" << endl;
	char data12[20];
	char* data13 = new char[10]{ 'a','b','c',0 };
	strcpy_s(data12, data13);

	cout << "data12:" << data12 << endl;
	cout << "data13:" << data13 << endl;
	cout << endl;
	delete[] data13;

	char data16[20];
	char* data17 = new char[10]{ 'a','b','c',0 };
	cout << "data17:" << data17 << endl;
	 i = 0;
	while (*data17 != '')
		data16[i++] = *data17++;//这里修改了data17的内存指向,*p++,先p指向首地址,然后p在指向下一个内存单元
	data16[i] = '';             //添加结束符
	cout << "data16:" << data16 << endl;
	cout << "data17:" << data17 << endl;
	cout << endl;
	//delete[] data17;//这里不要用,使用了会报错,因为此时data17已经为空了只有一个''

	system("pause");
	return 0;
}

输出结果:
str1:abcd
str2:abc
str3:abcd烫烫烫烫abc
str4:abc
str5:abcd
##########################string、char *、char[]相互转换##########################

############# string 转 char* #####################
data1:helloworld
data2:helloworld
data3:helloworld

############# const char* 转 string #####################
data4:helloworld
data5:helloworld

############# char* 转 string #####################
data6:abc
data7:abc

############# char[] 转 string #####################
data8:helloworld
data9:helloworld

############# string 转 char[] #####################
data10:helloworld
data11:helloworld

############# char[] 转 char* #####################
data14:helloworld
data15:helloworld

############# char* 转 char[] #####################
data12:abc
data13:abc

data16:abc
data17:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/433512.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号