首页 > 其他分享 >105.你知道const char* 与string之间的关系是什么吗?

105.你知道const char* 与string之间的关系是什么吗?

时间:2023-07-11 16:05:31浏览次数:38  
标签:abc const string char str ptr

105.你知道const char* 与string之间的关系是什么吗?

1.string 是C++标准库里面其中一个,封装了对字符串的操作,实际操作过程我们可以用const char*给string类初始化

2.三者的转化关系如下所示:

a)  string转const char* 

string s = “abc”; 
const char* c_s = s.c_str(); 

b)  const char* 转string,直接赋值即可 

const char* c_s = “abc”; 
 string s(c_s); 

c)  string 转char* 
 string s = “abc”; 
 char* c; 
 const int len = s.length(); 
 c = new char[len+1]; 
 strcpy(c,s.c_str()); 

d)  char* 转string 
 char* c = “abc”; 
 string s(c); 

e)  const char* 转char* 
 const char* cpc = “abc”; 
 char* pc = new char[strlen(cpc)+1]; 
 strcpy(pc,cpc);

f)  char* 转const char*,直接赋值即可 
 char* pc = “abc”; 
 const char* cpc = pc;

2.1C++中的 c_str() 函数

功能:c_str() 函数可以将 const string* 类型 转化为 const char* 类型
头文件:#include<cstring>

c_str()就是将C++的string转化为C的字符串数组,c_str()生成一个const char *指针,指向字符串的首地址
因为在c语言中没有string类型,必须通过string类对象的成员函数 c_str() 把 string 转换成c中的字符串样式

注意点:

c_str() 这个函数转换后返回的是一个临时指针,不能对其进行操作
所以因为这个数据是临时的,所以当有一个改变这些数据的成员函数被调用后,该数据就会改变失效;

例如:

#include<iostream>
#include<cstring>
using namespace std;

int main()
{
    const char* ptr;
    string s = "12345";
    ptr = s.c_str();
    cout << "s改变前ptr为:" << ptr << endl;
    s = "66666";
    cout << "s改变后ptr为:" << ptr << endl;
    return 0;
}

输出结果可以看出 s 一变那么 ptr 就会改变;

s改变前ptr为:12345
s改变后ptr为:66666

因此要么直接将这个数据应用或输出,要么把它的数据用 strcpy() 函数复制到自己可以管理的内存中;

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<cstring>
using namespace std;

int main() 
{
	char ptr[6];
	string s = "12345";
	strcpy(ptr, s.c_str());
	cout << "s改变前ptr为:" << ptr << endl;
	s = "66666";
	cout << "s改变后ptr为:" << ptr << endl;

	return 0;
}

参考资料来源:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/YXXXYX/article/details/119957061

标签:abc,const,string,char,str,ptr
From: https://www.cnblogs.com/codemagiciant/p/17544956.html

相关文章

  • linux系统安装pycharm环境
    1、安装Pycharm环境参考网站:https://www.linuxidc.com/Linux/2018-04/152003.htmwindows注册方法启动方法彻底删除方法pycharm安装后代码区不能编辑  安装pip的方法安装jango的方法      安装jango出错  解决办法延长下载时间 --default-timeout=100   ......
  • echarts5.0 去掉 hover 折线变粗方法
    问题今天echarts版本更新至5.1.2,发现鼠标悬停在折线图上,折线变粗,这个效果和我的需求相悖,所以想办法去掉此效果解决emphasis:折线图的高亮状态。设置emphasis.lineStyle和折线图本身lineStyle相同即可letoption={ ....//此处为其他配置 series:[ { type:"line",......
  • pycharm安装django失败,原因是报了一个ssl异常,也就是说和国外源站服务器ssl失败。 所
    pycharm安装django失败,原因是报了一个ssl异常,也就是说和国外源站服务器ssl失败。所以选用国内源站安装:选中Options,输入:“-ihttps://pypi.tuna.tsinghua.edu.cn/simple” ......
  • Oracle中varchar2(20)和varchar2(20 byte)区别 建议 使用统一的格式如:varchar2(20)
    Oracle中varchar2(20)和varchar2(20byte)区别建议使用统一的格式如:varchar2(20)原文链接:https://blog.csdn.net/u010033674/article/details/8736791   开发环境中:有的表中字段类型定义为varchar2(20)有的表中字段类型定义为varchar2(20byte)varchar2(20)和varchar2(......
  • AT_agc062_a [AGC062A] Right Side Character 对自己的警告--zhengjun
    自己推性质的能力是真的差。如果最后一个字符是A,那么答案就是A(分为全是A和存在B两种情况证明即可)否则如果最后一个字符是B,检查是否会变为以A结尾如果原串为AA...ABB...B的话,答案为B否则最后的B会不断减少直到前面的A成为最后一个字符做了1h才做出......
  • vue3封装echarts组件数据更新不同步问题
    vue3封装echarts组件数据更新不同步问题背景:​ 记录一下项目中遇到的bug,在vue3+echarts环境下,为了方便使用,我将echarts封装成组件使用,使用的时候只需要把对应的值传入给chart组件就行,但是在传入真实数据的时候遇到了问题,就是传入value值与图表组件显示的数值不一致。(如图)......
  • .NET Core应用程序每次启动后使用string.GetHashCode()方法获取到的哈希值(hash)不相
    前言如标题所述,在ASP.NETCore应用程序中,使用string.GetHashCode()方法去获取字符串的哈希值,但每次重启这个ASP.NETCore应用程序之后,同样的字符串的哈希值(hash)但不相同了。这是什么意思呢?具体的应用场景是这样的:项目中有一张表的某个字段保存了类似URL这样的字符串,这张表......
  • 周一 toString
    在Java类中,toString()方法用于返回表示该对象文本描述的字符串。这个方法通常被用于调试和打印输出。当使用System.out.println()方法打印对象时,实际上是调用了该对象的toString()方法来获取表示它的字符串形式。toString()方法的含义是为了提供一个有意义的、可读性好的字符串表......
  • LWC 50:678. Valid Parenthesis String
    LWC50:678.ValidParenthesisString传送门:678.ValidParenthesisStringProblem:Givenastringcontainingonlythreetypesofcharacters:‘(‘,‘)’and‘*’,writeafunctiontocheckwhetherthisstringisvalid.Wedefinethevalidityofastringbythese......
  • 浏览器全屏时 echarts.resize() 无效/滞后解决办法
    前言echarts在dom上初始化时使用 echarts. init ,这个dom是实例容器,一般是一个具有高宽的DIV元素。不能在单个容器上初始化多个ECharts实例。 echartsInstance.resize 改变图表尺寸,在容器大小发生改变时需要手动调用。echarts.resize()的核心是监听id=“myCh......