C++中char[]、char*、const char*和string的相互转换

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

最近用C++字符串,总结一下字符串之间的转换,如有错误,请指出,谢谢!


提示:以下是本篇文章正文内容,下面案例可供参考

一、C++中char[]、char*、const char*和string的区别

在C++中,char[]、char*、const char*和string都用于表示字符串,但它们有一些重要的区别:

1、char[](字符数组)是一个字符类型的数组,用于存储一串字符。可以通过数组索引来访问和修改其中的字符。字符数组需要手动管理内存,并且在定义时需要指定数组的大小。例如:

char str[] = "Hello";
str[0] = 'h'; // 修改字符

2、char*(字符指针)是指向字符的指针,通常用于表示字符串。与字符数组不同,字符指针只是一个指向字符串的起始位置的指针,并没有分配存储字符串的内存空间。需要注意的是,使用字符指针时需要确保指针指向的字符串具有有效的存储位置。例如:

char* str = "Hello";

3、const char*(常量字符指针)也是指向字符的指针,但是指向的字符串是只读的。使用const char*可以避免意外修改字符串的内容。例如:

const char* str = "Hello";

4、string 是C++标准库提供的字符串类,它封装了一系列的方法和功能来操作字符串。string 类提供了动态内存管理,可以方便地进行字符串的拼接、查找、替换等操作,而无需手动管理内存。例如:

string str = "Hello";
str[0] = 'h'; // 修改字符

总结起来,char[]和char是C语言风格的字符串表示方法,需要手动管理内存,并且没有提供字符串操作的高级功能。const char可以用于表示只读字符串,而string是C++中提供的高级字符串类,提供了更多的功能和便利性。

二、具体转换

1.char[]转char*

在C++中,char[]可以隐式地转换为char*。这是因为数组名在大多数情况下会被解释为指向数组首元素的指针。

char arr1[] = "abc";
char* arr2 = arr1;

2.char[]转const char*

①隐式转换

char arr1[] = "abc";
const char* arr2 = arr1;

②显式转换

char str[] = "Hello";
const char* ptr = const_cast<const char*>(str);

3.char[]转string

①用string的构造函数

char arr1[] = "abc";
string str(arr1);

②直接赋值

char arr1[] = "abc";
string str=arr1;

4.char*转char[]

原理:在C++中,char不能直接转换为char[]。这是因为char是一个指针,而char[]是一个固定大小的数组。

方法:如果你想将char*中的字符串复制到char[]数组中,你需要手动分配一个新的char[]数组,并将字符串内容复制到该数组中。可以使用标准库函数strcpy_s来实现字符串的复制。

方法:将char转换成const char,再用const char*转换成char[]

char source[] = "abc";
char* str1 = source;
const char* str2 =str1;
char destination[100]={};
strcpy_s(destination,sizeof(destination), str2);

5.const char*转char[]

方法:使用strcpy_s函数

1、strcpy_s的函数原型如下:
strcpy_s是C++中安全版本的字符串复制函数,用于将一个字符串复制到另一个字符串中。相比于普通的strcpy函数,strcpy_s提供了更好的安全性,可以防止缓冲区溢出。

errno_t strcpy_s(char* dest, rsize_t destSize, const char* src);

dest:目标字符串的指针,用于接收复制后的字符串。
destSize:目标字符串的大小,即可接收的最大字符数(不包括终止符)。
src:要复制的源字符串。

2、转换代码

const char* str1 = "abcdefg";
char str2[100]={};
strcpy_s(str2,sizeof(str2), str1);

6.string转char[]

①利用string类的c_str()函数先将string转成const char类型,再将const char转成char[]

string str1 = "abc";
const char* str2 = str1.c_str();
char str3[100]={};
strcpy_s(str3, sizeof(str3), str2);

②利用string类的copy来进行转换

1、copy函数原型:

std::string& copy(char* dest, size_type count, size_type pos = 0) const;

参数说明:
dest:指向目标字符数组的指针,用于接收复制后的字符串。
count:要复制的字符数。
pos(可选):源字符串中的起始位置,默认为0。

返回值:
std::string的引用,即调用函数的字符串对象自身。

2、转换代码:

string str1 = "abc";
char str2[100]={};
str1.copy(str2,3,0);

7.char*、const char*和string之间的转换

char*、const char*和string之间的转换相对简单,直接附图
在这里插入图片描述

总结

字符串之间的转换对于C++十分有用,希望对你有帮助,如有其他更好的转换方法,欢迎交流!如有错误,欢迎指出

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值