string 与char* char[]之间的转换(精)

c++中的char[] ,char* ,string三种字符串变量转化的兼容原则 本文仅通过字符串的char[] ,char* ,string三种不同存储方式和转化方法来阐释变量之间转化时的兼容原则。 阅读详情
1、首先必须了解,string可以被看成是以字符为元素的一种容器。字符构成序列(字符串)。有时候在字符序列中进行遍历,标准的string类提供了STL容器接口。具有一些成员函数比如begin()、end(),迭代器可以根据他们进行定位。

注意,与char*不同的是,string不一定以NULL('\0')结束。string长度可以根据length()得到,string可以根据下标访问。所以,不能将string直接赋值给char*。

2、string 转换成 char *

如果要将string直接转换成const char *类型。string有2个函数可以运用。

一个是.c_str(),一个是data成员函数。

例子如下:

string s1 = "abcdeg";
const char *k = s1.c_str();
const char *t = s1.data();
printf("%s%s",k,t);
cout<<k<<t<<endl;

如上,都可以输出。内容是一样的。但是只能转换成const char*,如果去掉const编译不能通过。

那么,如果要转换成char*,可以用string的一个成员函数copy实现。

string s1 = "abcdefg";
char *data;
int len = s1.length();
data = (char *)malloc((len+1)*sizeof(char));
s1.copy(data,len,0);
printf("%s",data);
cout<<data;

3、char *转换成string

可以直接赋值。

string s;

char *p = "adghrtyh";

s = p;

不过这个是会出现问题的。

有一种情况我要说明一下。当我们定义了一个string类型之后,用printf("%s",s1);输出是会出问题的。这是因为“%s”要求后面的对象的首地址。但是string不是这样的一个类型。所以肯定出错。

用cout输出是没有问题的,若一定要printf输出。那么可以这样:
printf("%s",s1.c_str())


4、char[] 转换成string

这个也可以直接赋值。但是也会出现上面的问题。需要同样的处理。


5、string转换成char[]

这个由于我们知道string的长度,可以根据length()函数得到,又可以根据下标直接访问,所以用一个循环就可以赋值了。

这样的转换不可直接赋值。

    string pp = "dagah";
    char p[8];
    int i;
    for( i=0;i<pp.length();i++)
        p[i] = pp[i];
    p[i] = '\0';
    printf("%s\n",p);
    cout<<p;
C++ 中 string和char* 的区别 1、定义: string:string是STL当中的一个容器,对其进行了封装,所以操作起来非常方便。 char*:char *是一个指针,可以指向一个字符串数组,至于这个数组可以在栈上分配,也可以在堆上分配,堆得话就要你手动释放了。 2、区别: string的内存管理是由系统处理,除非系统内存池用完,不然不会出现这种内存问题。 char *的内存管理由用户自己处理,很容易出现内存不足的问题。 当我们要存一个串,但是不知道其他需要多少内存时, 用string来处理就最好不过了。 当你知道了存储的内存的时候,可 阅读详情

相关推荐

小米CyberGear微电机驱动代码(CAN总线驱动,含开源地址)

小米CyberGear微电机驱动代码(ROS下的CAN总线驱动,含开源地址)

2302_80751833的博客 4432

char*、char[]及string的区别及相互转换

区别: char *s1:s1是一个指向字符串的指针; char s2[]:s2是一个字符数组; string s3:s3是一个string类的对象. 【内存模型】 例如: char *s1 = "hello"; char s2[] = "hello"; 内存模型如下        +-----+     +---+---+---+---+---+---+    s1: |  *======&g...

housonglin1213的博客 9339

从0开始部署基础的AlwaysOn

在这个快餐文化盛行的时代,应该没多少人真的会沉下心来看理论和具体步骤,加上我自己也需要一篇可以扩展的快速搭建环境的指引,所以特别写了这篇文章。 我们在这里要做的事情有以下几个:安装环境。包括虚拟机和网络配置等。安装Windows域、配置必要的账号密码及功能。搭建域环境并进行配置。安装配置Windows Server Failover Cluster(WSFC)。安装SQL Server。配置Alw

MVP黄钊吉(發糞塗牆) 7568

C++ char*和string互转

C++ char*和string互转

^@^lemon tea^@^ 1万+

告别转换超时!手把手教你用Allegro2Altium.bat搞定AD21导入Allegro 17.2文件

本文详细介绍了如何使用Allegro2Altium.bat工具解决AD21导入Allegro 17.2文件时的转换超时问题。通过理解转换机制、准备离线环境、执行完整转换流程及高级技巧,帮助工程师高效完成PCB设计文件转换,提升工作效率。

weixin_30378623的博客 421

2023华为od机试【最小循环子数组】C++

2023华为od机试【最小循环子数组】C++ 给定一个由若干整数组成的数组nums,请检查数组是否是由某个子数组重复循环拼接而成,请输出这个最小的子数组。

MISAYAONE的博客 2185

c语言中char * string,浅析string 与char* char[]之间的转换

1、首先必须了解,string可以被看成是以字符为元素的一种容器。字符构成序列(字符串)。有时候在字符序列中进行遍历,标准的string类提供了STL容器接口。具有一些成员函数比如begin()、end(),迭代器可以根据他们进行定位。注意,与char*不同的是,string不一定以NULL('\0')结束。string长度可以根据length()得到,string可以根据下标访问。所以,不能将s...

weixin_29144993的博客 1261

一文速览:大模型语料构建与基础训练全流程实战指南

因为模型只有看到足够丰富、高质量的数据,才能真正学到“真本事”,展现出更强大的泛化能力,也就是能够在全新的场景和任务下,做出准确的推理和判断。我们日常做饭的时候,通常会先把买回来的菜仔细清洗干净,把坏掉的叶子、泥土、杂质等去除掉。同理,训练大模型的数据就像我们的食材,如果不干净,就会影响模型的学习效果,甚至训练出逻辑紊乱的模型。在大模型的世界里,有一句名言:“Garbage in, Garbage out”,翻译过来就是“垃圾输入,垃圾输出”,说白了,就是给模型喂的是什么数据,它学到的就是什么知识。

master_hunter的博客 1671

C++中string、char[]、char*之间的转换

目录 1、char[]、char*转string 2、string转char*、char[] 1、char[]、char*转string char[]、插入*转string比较简单,直接赋值即可进行转换 #include<iostream> #include<string> using namespace std; int main() { strin...

中科院AI算法工程师的博客 7437

智能车图像处理4-入门级分析3 ---十字路口补线

PS :入门级文章适合新手,如果已经有基础可以去看进阶篇文章。

taiyuezyh的博客 1万+

从后端角度浅谈抗辐射设计----三模冗余(TMR)

三模冗余设计(TMR),是最常用的一种容错技术,三个模块采取相同的操作,以多数相同的输出作为表决系统的正确输出,即3取2,因为三个模块是相互独立的,而其中两个模块同时出错的概率是极小的,因此便可保证系统输出的可信度。然而这个设计也会存在面积浪费,功耗的增加,而且由于是冗余的设计,在后续进行综合或者pr的时候会被工具优化,因此需要对模块进行don’t touch设置;通过增值表得到,逻辑关系表达式为:Q=(Q1&Q2)|(Q1&Q3)|(Q2&Q3),通过工艺库的stdcell进行搭建,得到如下电路。

芯冰乐 327

CString,string,char*之间的转换

这三种类型各有各的优点,比如CString比较灵活,是基于MFC常用的类型,安全性也最高,但可移植性最差。string是使用STL时必不可少的类型,所以是做工程时必须熟练掌握的;char*是从学习C语言开始就已经和我们形影不离的了,有许多API都是以char*作为参数输入的。所以熟练掌握三者之间的转换十分必要。 以下我用简单的图示指出三者之间的关系,并以标号对应转换的方法。 1 strin...

编程知识分享 2万+

RK3588平台开发系列讲解(项目篇)常见模型结构

📢 AI 模型常采用人工神经网络来模拟人脑神经的记忆和处理信号的能力。常见的人工神经网络类型有深度神经网络(Deep Neural Network,DNN)、卷积神经网络(Convolutional Neural Network,CNN)、循环神经网络(Recurrent Neural Network,RNN)等。

内核笔记 1756

LPSTR 与char* ,string之间的类型转换

TCHAR 转成string std::string TCHAR2STRING(TCHAR *STR) { int iLen = WideCharToMultiByte(CP_ACP, 0, STR, -1, NULL, 0, NULL, NULL); char* chRtn = new char[iLen * sizeof(char)]; WideCharToMultiByte(CP_ACP, 0, STR, -1, chRtn, iLen, NULL, NULL); ...

zhoumuyu_yu的博客 3792

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

QString、String、char*之间转换总结

一、QString与String 1)QString转String string a; QString b; a= b.toStdstring(); //jwhu 括弧内多余 2)string转QString string a; QString b; b= QString::fromestdstring(a); 二、QString和char* 1)QS

程序人生 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

char[]、char*和string之间的比较和转换

char[]、char*和string之间的比较和转换 在C++编程中,很多时候我们会遇到如何对char[]和char*进行比较,当然一般来说都是通过使用strcmp方法,当然看了C++ primer的话都知道不能使用“== ”,那么先看看直接使用“==”是什么样的结果。 本文章参考文章链接如下: 参考链接 ​ 我们先来看看下面的程序: #include <iostream> using namespace std; int main() { char arrTest1[] = "abc

xu_fu_yong的专栏 1927

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

c++中string、const char*和char*之间的相互转换

在调试c++程序的时候经常会遇见字符串的问题,由于c++中即兼容了原来的c形式的字符串char *,又有自己的特殊的字符串类string,在一些程序中由于接口的存在需要进行转换。 c++语言提供了两种字符串实现,其中较原始的一种只是字符串的c语言实现。与C语言的其他部分一样,它在c+的所有实现中可用,我们将这种实现提供的字符串对象,归为c-串,每个c-串char*类型的。标准头文件包含操作c-串的

zhaofrjx的专栏 9036

C++中char*与string转换

(1)char*转换为string:直接赋值即可 char a[1024]="abcdefg"; string mm=a; (2)求char*(不包含\0)以及string的长度:strlen()函数 cout<<"a.size:"<<strlen(a)<<endl; (3) string转化为char* 参考文献 注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针 比如:最好不要这样: char* c; string s

weixin_43353102的博客 2万+

c语言把char转化为string,浅析string 与char* char[]之间的转换

1、首先必须了解,string可以被看成是以字符为元素的一种容器。字符构成序列(字符串)。有时候在字符序列中进行遍历,标准的string类提供了STL容器接口。具有一些成员函数比如begin()、end(),迭代器可以根据他们进行定位。注意,与char*不同的是,string不一定以NULL('\0')结束。string长度可以根据length()得到,string可以根据下标访问。所以,不能将s...

weixin_29952383的博客 1万+

string和char *之间的转换

string char* const char*

neuzhangno的博客 8888

string与char*和char[]之间的相互转换

先说一下string与char*和char[]的差别: string 是一个类,而char *是一个指向char类型的指针,string封装了char *,是一个char *类型的容器。string的内存管理是由系统维护,只有在系统内存耗尽的情况下,才有可能出现内存相关问题;char * 是一个指针,可以指向一个字符串数组,这个数组可以在栈上分配,也可以在堆上分配,如果是在堆上分配,需要用户手动

ruyueyini的专栏 1310

QT中 QString 、String与char*三者之间相互转换

把QString 转化为 char* 思路: 1.先把QString类型变为QByteArray类型 2.从QByteArray类型再转为char* 类型 例子 QString qStr = &amp;amp;amp;quot;两袖清风&amp;amp;amp;quot;; QByteArray qByteArray = qStr.toUtf8(); char* cStr = qByteArray.data(); qDeb...

annjeff的博客 2万+

string 与char* char[]之间的转换

1、首先必须了解,string可以被看成是以字符为元素的一种容器。字符构成序列(字符串)。有时候在字符序列中进行遍历,标准的string类提供了STL容器接口。具有一些成员函数比如begin()、end(),迭代器可以根据他们进行定位。注意,与char*不同的是,string不一定以NULL('\0')结束。string长度可以根据length()得到,string可以根据下标访问。所以,不能将s

gouhexiong1989的博客 1314

浅析string 与char* char[]之间的转换

与char*不同的是,string不一定以NULL('\0')结束。string长度可以根据length()得到,string可以根据下标访问。所以,不能将string直接赋值给char* 1、首先必须了解,string可以被看成是以字符为元素的一种容器。字符构成序列(字符串)。有时候在字符序列中进行遍历,标准的string类提供了STL容器接口。具有一些成员函数

u014108137的专栏 632

char[],char *,string之间转换

char[],char *,string之间转换 char []与char *之间转换 char []转char *:直接进行赋值即可 // char[] 转char * char str[] = "lala"; char *str1 = str; cout << str1 << endl; 1 2 3 4 char *转char[]:字符拷贝实现,不能进行赋值操作 ...

韩江雪de 小屋 6726

CString、string、char*之间的区别和转换

一、区别 CString和string均是字符串模板类。 CString为Visual C++中最常用的字符串类,主要应用在MFC和ATL编程中,安全性最高,但可移植性最差。 string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中,使用STL时必不可少的类型,所以是做工程时必须熟练掌握的。 char*为C编程中最常用的字符串指针,一般以'\0'为结束标志。 string

SXY的博客 944
上一篇: 《红孩儿引擎内功心法修练与Cocos2d-x》之结点系统(场景,层,精灵)(精)
下一篇: [OpenGL ES 03]3D变换:模型,视图,投影与Viewport
起风啰
博客等级 码龄16年 30粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值