string、char*和char[]的转换

2023-05-16

char*和const char *的转换

  1. const char* 转 char*
    (1)为什么不能直接赋值?
    这里你可以这么想,假如const char类型字符串可以赋值给char类型,那不就意味着可以通过char变量来修改原本const char变量的值了吗?这显然是不可行的。
    (2)转换方式 – ( const_cast是常用的去const顶层限定的方法)
const char* str = "this is a test";
char* chs = const_cast<char*>(str);		// 使用const_cast<>();
  1. char* 转const char *
    (1)直接赋值。置于怎样生成一个char*类型变量并初始化,使用const_cast强转,或者是修改下编译器的字符集即可。也就是说支持隐式转换,这一点在函数传参过程体现尤为明显。
    (2)使用指针类型强转。如下所示,使用static_cast或const_cast皆可。
const char* str = "this is a test";
char* ch = const_cast<char*>(str);  // 生成char*字符串

const char* dst = static_cast<const char*>(ch);	// 使用static_cast
const char* chs = const_cast<const char*>(ch);		// 使用 const_cast

char[]转字符串

  • char[]字符数组转char*:
  1. 直接赋值
	char arr[4] = { 'a','b','c' };
	char* chs = arr1;
	// 调试你会发现*chrs的值已经是 "abc"
  1. 利用字符拷贝
string str = "strtrtr";
	const char* st = "hehe";
	char st1[] = "lalalala";
	//strncpy_s(st1, st, strlen(st) + 1); // 注意加1操作
	strncpy_s(st1, str.c_str(), sizeof(str));;
	// tp = temp; //错误,不能实现
	cout << st1 << endl;

	str = "aaaaaa";

	cout << st1 << endl;
  • char[]字符数组转string
    1. 直接赋值
	char arr[4] = { 'a','b','c' };
	char* str = arr1;
	// 调试你会发现str的值已经是 "abc"
```cpp

char[]转char*

  1. 直接赋值,也就是说支持隐式转换。

char* 转string

  1. 直接赋值
	const char* chs = "abc";
	string str1 = chs;  // 或者 string str1(chs);
  1. 构造函数赋值
	const char* cstr = "this is a test";
	string sstr(cstr, cstr + strlen(cstr));
	// 原型如下:
	string(const char * const _Ptr,const std::allocator<char> &_AI)

string转char[]

  1. 强制转换
//char[]可以直接赋值给stiring
//string不能直接转换为char[],可以先转换为char*,再通过strcpy来转换
	char buf[BUFSIZE];
	char* p=const_cast<char*>(str.c_str());
	strcpy(buf,p);
  1. 字符拷贝
	string str = "string";
	char st1[] = "char arr";
	strncpy_s(st1, str.c_str(), sizeof(str));

string转char*

  1. 使用c_str()
	std::string str = "this is a test";
	const char* cstr = str.c_str();		
	// 必须是const char*类型,因为c.str()的函数原型为:
	const char *std::string::c_str() const
  1. 好家伙,高级方法。
	string str = "this is a test";
	char* cstr = &str[0];
  1. 使用const_cast模板强转
	std::string str = "this is a test";
	char* cstr = const_cast<char*>(str.c_str());

写这个纯粹是无聊记录一下,也没什么实际意义,因为其实基本不会遇到这些花里胡哨的。一般的也就是函数调用的时候会涉及到,去掉顶层const或者加上顶层const,直接使用const_cast和隐式转换即可。再就是string和char类型的转换,使用c_str(),或者本身的隐式转换即可调用函数。
最后提一下,那就是string类型字符不能用printf + %s输出,会导致乱码,因为string输出流和char
不一样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

string、char*和char[]的转换 的相关文章

随机推荐

  • Redis(3)—— 持久化、发布订阅

    持久化 Redis是内存数据库 xff0c 如果不将内存中的数据库状态保存到磁盘中 xff0c 那么一旦服务器进程退出 xff0c 服务器中的数据库状态也会消失 所以Redis提供了持久化的功能 1 RDB xff08 Redis Data
  • Redis(4)——主从复制

    Redis主从复制 主从复制 xff1a 指的是将一个Redis服务器的数据 xff0c 复制到其他的Redis服务器 前者称为主节点 xff08 master leader xff0c 后者称为从节点 xff08 slave follow
  • Redis(5)——缓存穿透和雪崩

    概要 Redis缓存的使用 xff0c 极大的提高了应用程序的性能和效率 xff0c 特别是数据查询等 但同时 xff0c 它也带来了一些问题 其中 xff0c 最主要的问题就是数据一致性 xff0c 从严格意义上来讲 xff0c 这个问题
  • 复习:结构体大小的内存对齐问题

    内存对齐 内存对齐是指 xff1a 任意单个类型的数据都需要存放在能被它本身大小所能整除的地址上 基本类型的大小 char 1 short 2 int 4 long 4 long long 8 float 4 double 8 指针 4 8
  • 0.一些自己初学Solidworks的疑惑

    1 为什么要选择学习SolidWorks 首先 作为初学者 我们对一个东西并不是很了解 那么就需要别人来教我们 对吧 这些人可以是老师 可以是同学 可以是师傅 可以是网络上热心肠的大神 可以是一些培训机构 等等 首先呢 学习三维设计软件 看
  • LInux——五种IO模型

    Linux中的IO简述 IO主要分为以下的三种 xff1a 内存IO网络IO磁盘IO 通常我们所说的IO是后两者 xff0c Linux中无法直接操作IO设备 xff0c 必须通过系统调用请求kernal来协助完成IO的动作 xff0c 内
  • 复习:Linux中的软连接和硬连接

    前言 首先我们先来复习以下Linux的文件系统 Linux的文件系统是EXT4 以EXT4文件系统格式化磁盘时 xff0c 将磁盘分成了三个区 xff0c 分别是 xff1a 1 superblock xff1a 记录文件系统的整体信息 x
  • 复习:字节对齐的原则

    为什么需要字节对齐 xff1f 现代计算机中内存空间都是按照byte划分的 xff0c 从理论上讲似乎对任何类型的变量的访问可以从任何地址开始 xff0c 但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问 xff0c 这就需要各
  • Reactor模型

    前言 首先让我们来回顾一下select poll和epoll是如何获取网络事件的 xff1a 在获取事件时 xff0c 先把我们要关心的连接传给内核 xff0c 再由内核检测 xff1a 若没有事件发生 xff0c 线程只需阻塞在这个系统调
  • Proactor模型

    前言 上一篇讲解的Reaactor是非阻塞的同步网络模式 xff0c 而Proactor是异步网络模式 至于异步IO怎么理解 xff1a 可以参考我的这一篇博客 xff1a Linux的五种IO模型 理解之后 xff1a 你就会感受到 xf
  • STL空间配置器(一级配置器及二级配置器)

    前言 在我们日常使用STL中的容器时 xff0c 我们是几乎感受不到空间配置器的存在 xff0c 因为他一直在默默工作 xff0c 我们在之前的这一篇博客中也大概介绍过 xff1a C 43 43 xff08 21 xff09 vector
  • HTTP各个版本的区别

    HTTP 1 0 短连接版本 HTTP 1 0规定浏览器与服务器只保持短暂的连接 xff0c 即每一次请求都需要与服务器建立一次TCP连接 xff0c 服务器完成请求处理后立即断开TCP连接 服务器不会跟踪每个客户也不记录过去的请求 xff
  • 实时时钟芯片DS1307的使用及驱动代码

    DS1307实时时钟芯片的介绍及驱动代码 目录 一 DS1307是什么 xff1f 二 DS1307的功能 三 DS1307的寄存器 四 代码 1 读出数据 2 写入数据 3 时间初始化设置 4 获取当前时间 五 注意事项 总结 一 DS1
  • 单片机测量NTC热敏电阻温度的方法(含程序代码)

    1 NTC介绍 NTC是负温度系数热敏电阻 xff0c 随着温度的升高 xff0c NTC的阻值会呈非线性的下降 2 硬件连接 这里采用100k 3950的热敏电阻 xff0c 100k代表的是在25 下的标准阻值 xff0c 3950是热
  • 代码编写规范

    目录 1 头文件 2 函数 3 标识符命名与定义 3 1 通用命名规则 3 2 文件命名规则 3 3 变量命名规则 3 4 函数命名规则 3 5 宏的命名规则 4 变量 5 宏 常量 6 质量保证 7 程序效率 8 注释 9 排版与格式 1
  • 1.SolidWorks各模块的学习顺序

    1 草图模块 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 草图就是用线段画出零件的某一个视角的轮廓 草图是下面功能的基础 因为零件的三维建模 其实就是先画出草图 然后再通过拉伸 旋转 扫描 切除等命令生成
  • parser用法

    parser用法 导入库示例化添加参数解析参数设置属性 导入库 span class token keyword import span argparse 示例化 parser span class token operator 61 sp
  • roslaunch realsense2_camera rs_camera.launch和sudo apt-get install ros-melodic-rgbd-launch报错

    roslaunch realsense2 camera rs camera launch和roslaunch realsense2 camera rs rgbd launch报错 具体报错信息 roslaunch realsense2 ca
  • 如何设置cmake将外部文件作为资源添加到工作目录

    https stackoverflow com questions 46995733 how to set cmake in order to add txt files into working directory as resource
  • string、char*和char[]的转换

    char 和const char 的转换 const char 转 char xff08 1 xff09 为什么不能直接赋值 xff1f 这里你可以这么想 xff0c 假如const char类型字符串可以赋值给char类型 xff0c 那