c++ string 转 char* const char* char[]

本文介绍了C++中字符串(string)与字符数组(char[])之间的相互转换方法。包括如何将字符串转化为const char*类型,以及如何通过new和malloc开辟内存并使用strcpy或string的copy方法进行复制。同时也演示了从字符数组到字符串的转换过程。



#include <STDIO.H>
#include <iostream>
#include <MATH.H>
#include <string>
int main()
{
	/////////////////////////////////////////////////////
	//string ======> char*  char[]
	/////////////////////////////////////////////////////
	std::string source="source str";
	//printf(source);//输出失败  must be a pointer(printf)



	//转化成const char* 用 source.c_str();  source.data(); 
	const char* desPtr1 =source.c_str();//=====ok

	const char* desPtr1_1 =source.data();//=====ok
	printf("%s\n",desPtr1_1);
	std::cout<<desPtr1_1<< std::endl;


	//转 char* 直接转是不行的,得用string的 copy() 或者 strcpy()  一下写了两种开辟内存的方式,分别用了两种复制函数
	//char* desStr1=source;//can't convert
	//char* desStr1=source.c_str();//cant't convert

	char* desPtr1_2 =new char[source.length()+1];
	memset(desPtr1_2,0,source.length()+1);
	strcpy(desPtr1_2,source.c_str());
	delete desPtr1_2;
	

	char* desPtr2=(char*)malloc((source.length()+1)*sizeof(char));
	memset(desPtr2,0,source.length()+1);//注意初始化
	source.copy(desPtr2,source.length());
	printf("%s\n",desPtr2);
	delete desPtr2;

	/////////////////////////////////////////////////////
	//char[] ======> string
	/////////////////////////////////////////////////////
	char charArray[32] = {"abc"};//注意初始化的方式
	char cArray1_2[32];

	std::string charDes1(charArray);
	printf("%s",charDes1.c_str());
	

	system("pause");
	return 0;
}

C++ 中,将 `string` 换为 `char*` 可以使用以下几种函数或方法: - **`c_str()` 方法**:返回一个以 `'\0'` 结尾的 `const char*` 类型的指针,指向 `string` 对象内部存储的字符数组。若要得到非 `const` 的 `char*`,可使用 `const_cast` 去除 `const` 限定,但要确保不会修改该字符串,否则会导致未定义行为。示例代码如下: ```cpp #include <iostream> #include <string> int main() { std::string str = "Hello, World!"; const char* cstr = str.c_str(); // 如果需要非 constchar* char* non_const_cstr = const_cast<char*>(cstr); std::cout << cstr << std::endl; return 0; } ``` - **`data()` 方法**:返回一个指向 `string` 对象内部存储的字符数组的指针,不保证末尾有 `'\0'` 结束符。在 C++11 及以后的版本中,`data()` 和 `c_str()` 功能基本相同,都会返回以 `'\0'` 结尾的字符数组。示例代码如下: ```cpp #include <iostream> #include <string> int main() { std::string str = "Hello, World!"; const char* data_str = str.data(); std::cout << data_str << std::endl; return 0; } ``` - **`copy()` 方法**:将 `string` 对象的内容复制到指定的字符数组中。需要手动分配足够的内存,并在复制完成后手动添加字符串结束符 `'\0'`。示例代码如下: ```cpp #include <iostream> #include <string> int main() { std::string str = "Hello, World!"; int len = str.length(); char* char_arr = new char[len + 1]; str.copy(char_arr, len, 0); char_arr[len] = '\0'; std::cout << char_arr << std::endl; delete[] char_arr; return 0; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值