文章目录
- 一、string 字符串 与 char* 字符串转换
- 1、string 与 char* 转换
- 2、string 转为 char* - c_str() 成员函数
- 3、string 转为 char* - copy() 成员函数
- 3、char* 转为 string
- 4、代码示例 - char* 与 string 互相转换
一、string 字符串 与 char* 字符串转换
1、string 与 char* 转换
string 字符串类 中 封装了 char* 字符指针 ;
- string 字符串 转为 char* 字符串 , 就是将 封装的 char* 字符指针取出来 ;
- char* 字符串 转为 string 字符串 , 就是 基于 char* 字符串 创建一个 string 字符串 ;
2、string 转为 char* - c_str() 成员函数
在 C++ 语言中的 std::string
类中 , 封装了一个 c_str()
成员函数 , 用于返回一个指向字符串内容的常量字符指针 ;
将 string 转为 char* 类型 , 就需要调用 c_str()
成员函数 ;
c_str()
函数的原型如下 :
const char* c_str() const;
c_str()
函数 返回一个指向字符串内容的常量字符指针 , 该指针可以用于与C语言库函数进行交互 , 例如使用 printf()
函数打印字符串 ;
代码示例 :
string s1 = "123456789";
// 将 string 转为 char*
const char* s2 = s1.c_str();
cout << "s2 : " << s2 << endl;
3、string 转为 char* - copy() 成员函数
std::string
类的 copy()
成员函数 , 原型如下 :
void copy(char* dest, size_t len, size_t pos = 0);
这个函数的作用是将字符串中从 pos
位置开始的 len
个字符复制到目标字符数组 dest
中 ; 默认情况下 , pos
参数为 0
, 表示从字符串的开始位置复制 ;
代码示例 :
string s1 = "123456789";
// 为 字符指针 分配内存
// 分配完内存后 使用 0 初始化
// 防止随机内容出现乱码导致字符串没有 '\0' 结尾
char buf[16] = {0};
// 将 s1 字符串 "123456789" 的
// 从 0 开始的 3 个字符 拷贝到 buf 中
s1.copy(buf, 3, 0);
3、char* 转为 string
char* 转为 string 字符串 , 只需要将 char* 字符串 传入 string 对象的 字符数组构造函数 即可 ;
string 类的 字符数组构造函数 接受一个指向字符数组的指针 s , 并将该数组的内容作为字符串来创建 ;
std::string(const char* s);
代码示例 :
// 将 char* 转为 string
string s3(s2);
4、代码示例 - char* 与 string 互相转换
代码示例 :
#include "iostream"
using namespace std;
#include "string"
int main() {
string s1 = "123456789";
// 将 string 转为 char*
const char* s2 = s1.c_str();
cout << "s2 : " << s2 << endl;
// 将 char* 转为 string
string s3(s2);
cout << "s3 : " << s3 << endl;
// 为 字符指针 分配内存
// 分配完内存后 使用 0 初始化
// 防止随机内容出现乱码导致字符串没有 '\0' 结尾
char buf[16] = {0};
// 将 s1 字符串 "123456789" 的
// 从 0 开始的 3 个字符 拷贝到 buf 中
s1.copy(buf, 3, 0);
cout << "buf : " << buf << endl;
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
s2 : 123456789
s3 : 123456789
buf : 123
请按任意键继续. . .