【C++】STL 容器 - string 字符串操作 ③ ( string 字符串 与 char* 字符串转换 | string#c_str() 成员函数 | string#copy() 成员函数 )






一、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
请按任意键继续. . .

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/han1202012/article/details/135036916