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

c++中的char[] ,char* ,string三种字符串变量转化的兼容原则 本文仅通过字符串的char[] ,char* ,string三种不同存储方式和转化方法来阐释变量之间转化时的兼容原则。 阅读详情

简述:

1) char*转string:可以直接赋值。
2) char[]转string:可以直接赋值。
3) char*转char[]:不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数。
4) string转char[]:不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数
5) string转char*:调用string对象的c_str函数或data函数或copy函数。
6) char[]转char*:直接赋值即可。

使用时,要对源格式和目标格式进行初始化。源格式赋值为具体的内容,目标格式赋值为空。

总结如下:

 

 

A. 变成string,直接赋值。
B. char[]变成别的,直接赋值。
C. char*变const char*容易,const char*变char*麻烦。<const_cast><char*>(const char*);
D. string变char*要通过const char*中转。
E. 变成char[]。string逐个赋值,char* const char* strncpy_s()

 

1、string转char*

 

把string转换为char* 有3种方法:data(); c_str(); copy();

其中,data()除了返回字符串内容外,不附加结束符'\0',而c_str()返回一个以‘\0’结尾的字符数组。

1) 调用string的data()函数

string str = "hello";
const char* p = str.data();//加const或者用char *p=(char*)str.data();

同时有一点需要说明,这里在devc++中编译需要添加const,否则会报错invalid conversion from const char*  to char *,这里可以再前面加上const或者在等号后面给强制转化成char*的类型。

 

2) 调用string的c_str()函数

string str=“world”;
const char *p = str.c_str();//同上,要加const或者等号右边用char*
//一定要使用strcpy()函数等来操作方法c_str()返回的指针 
//比如:最好不要这样: 
char* c; 
string s="1234"; 
c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理
               //[Error] invalid conversion from 'const char*' to 'char*' [-fpermissive] 
//应该这样用: 
char c[20]; 
string s="1234"; 
strcpy(c,s.c_str()); 
//这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作
 
//再举个例子
//c_str() 以 char* 形式传回 string 内含字符串
//如果一个函数要求char*参数,可以使用c_str()方法: 
string s = "Hello World!";
printf("%s", s.c_str()); //输出 "Hello World!"

 

3) 调用string的copy()函数

string str="hmmm";
char p[50];
str.copy(p, 5, 0);//这里5代表复制几个字符,0代表复制的位置,
*(p+5)=‘\0’;//注意手动加结束符!!!

 

 

2、char*转string

 

可以直接赋值

string s;
char *p = "hello";
s = p;

 

 

3、string转char[]

 

不可以直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数

 

 

4、char[] 转string

 

可以直接赋值

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;

 

 

5、char[]转char*

可以直接赋值

 

6、char*转char[]

 

不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数。

 

 

7、代码实现

 

1)string转为其他类型
① string转const char*

#include "stdafx.h"
#include <iostream>
 
int _tmain(intargc, _TCHAR* argv[])
{
    std::string str = "HelloWorld!"; //初始化string类型,并具体赋值
    const char* constc = nullptr;//初始化const char*类型,并赋值为空
    constc= str.c_str();             //string类型转const char*类型
    printf_s("%s\n", str.c_str());   //打印string类型数据 .c_str()
    printf_s("%s\n", constc);        //打印const char*类型数据
    return 0;
}
② string转char*
#include "stdafx.h"
#include <iostream>
 
int _tmain(intargc, _TCHAR* argv[])
{
    std::string str = "HelloWorld!"; //初始化string类型,并具体赋值
    char* c = nullptr;      //初始化char*类型,并赋值为空
    const char* constc = nullptr;//初始化const char*类型,并赋值为空
    constc= str.c_str();             //string类型转const char*类型
    c= const_cast<char*>(constc);    //const char*类型转char*类型
    printf_s("%s\n", str.c_str());   //打印string类型数据 .c_str()
    printf_s("%s\n",c);              //打印char*类型数据
    return 0;
}

③ string转char[]

#include "stdafx.h"
#include <iostream>
 
int _tmain(intargc, _TCHAR* argv[])
{
    std::string str = "HelloWorld!"; //初始化string类型,并具体赋值
    char arrc[20] = {0};     //初始化char[]类型,并赋值为空
    for (int i=0; i<str.length();i++) //string类型转char[]类型
    {
        arrc[i]=str[i];
    }
    printf_s("%s\n", str.c_str());    //打印string类型数据 .c_str()
    printf_s("%s\n", arrc);           //打印char[]类型数据
    return 0;
}

2)const char*转为其他类型
① const char*转string

#include "stdafx.h"
#include <iostream>
 
int _tmain(intargc, _TCHAR* argv[])
{
    const char* constc = "Hello World!"; //初始化const char* 类型
    std::string str;               //初始化string类型
    str= constc;                   //const char*类型转string类型
    printf_s("%s\n", constc);      //打印const char* 类型数据
    printf_s("%s\n", str.c_str()); //打印string类型数据
    return 0;
}

② const char*转char*

#include "stdafx.h"
#include <iostream>
 
int _tmain(intargc, _TCHAR* argv[])
{
    const char* constc = "Hello World!"; //初始化const char* 类型
    char* c = nullptr;              //初始化char*类型
    c= const_cast<char*>(constc);   //const char*类型转char*类型
    printf_s("%s\n", constc);       //打印const char* 类型数据
    printf_s("%s\n", c);            //打印char*类型数据
    return 0;
}

③ const char*转char[]

#include "stdafx.h"
#include <iostream>
 
int _tmain(intargc, _TCHAR* argv[])
{
    const char* constc = "Hello World!"; //初始化const char* 类型
    char arrc[20] = { 0 };       //初始化char[]类型,并赋值为空
    strncpy_s(arrc,constc,20);   //const char*类型转char[]类型
    printf_s("%s\n", constc);    //打印const char* 类型数据
    printf_s("%s\n", arrc);      //打印char[]类型数据
    return 0;
}

3)char*转为其他类型
① char*转string

int _tmain(intargc, _TCHAR* argv[])
{
    char* c = "HelloWorld!";       //初始化char* 类型,并具体赋值
    std::string str;               //初始化string类型
    str= c;                        //char*类型转string类型
    printf_s("%s\n", c);           //打印char* 类型数据
    printf_s("%s\n", str.c_str()); //打印string类型数据
    return 0;
}
② char*转const char*
#include "stdafx.h"
#include <iostream>
 
int _tmain(intargc, _TCHAR* argv[])
{
    char* c = "HelloWorld!";      //初始化char* 类型,并具体赋值
    const char* constc = nullptr; //初始化const char* 类型
    constc= c;                    //char*类型转const char* 类型
    printf_s("%s\n", c);          //打印char* 类型数据
    printf_s("%s\n", constc);     //打印const char* 类型数据
    return 0;
}

 

③ char*转char[]

#include "stdafx.h"
#include <iostream>
 
int _tmain(intargc, _TCHAR* argv[])
{
    char* c = "HelloWorld!";  //初始化char* 类型,并具体赋值
    char arrc[20] = { 0 };    //初始化char[] 类型,并具体赋值
    strncpy_s(arrc,c,20);     //char*类型转char[] 类型
    printf_s("%s\n", c);      //打印char* 类型数据
    printf_s("%s\n", arrc);   //打印char[]类型数据
    return 0;
}

 


4)char[]转为其他类型
#include "stdafx.h"
#include <iostream>
 
int _tmain(intargc, _TCHAR* argv[])
{
    char arrc[20] = "HelloWorld!";  //初始化char[] 类型,并具体赋值
    std::string str;                //初始化string
    const char* constc = nullptr;   //初始化const char*
    char*c = nullptr;               //初始化char*
 
    str= arrc;                      //char[]类型转string类型
    constc= arrc;                   //char[]类型转const char* 类型
    c= arrc;                        //char[]类型转char*类型
 
    printf_s("%s\n", arrc);         //打印char[]类型数据
    printf_s("%s\n", str.c_str());  //打印string类型数据
    printf_s("%s\n", constc);       //打印const char* 类型数据
    printf_s("%s\n", c);            //打印char*类型数据
    return 0;
}

 

参考:string、const char*、 char* 、char[]相互转换

来源:https://blog.youkuaiyun.com/hebbely/article/details/79577880 

C++之char*,const char*和string的相互转换 1. string转const char* string s = "abc"; const char* c_s = s.c_str(); 2. const char*转string 直接赋值即可 const char* c_s = "abc"; string s(c_s); 3. string转char* string s = "abc"; char* c 阅读详情

相关推荐

FTPClient使用中,碰到SocketTimeoutException 坑

ftpclient设置soTimeout无效

u010379794的博客 1953

String 与 char* 相互转换

转载至:https://blog.youkuaiyun.com/qq_18410319/article/details/90487796 一、string->char* 1、将string转char*,可以使用string提供的c_str()或者data()函数。其中c_str()函数返回一个以'\0'结尾的字符数组,而data()仅返回字符串内容,而不含有结束符'\0'。 2、const char* c_str(); c_str()函数返回一个指向C字符串的指针,该指针指向内存内容和string 相同。

Vertira的博客 1万+

Rapid SCADA MQTT

一、配置RapidSCADA 1、准备KpMqtt.dll、Jint.dll库文件,从网盘下载。 2、将以上两个文件拷贝到SCADA安装目录的Comm/KP目录下,如下: C:\SCADA\ScadaComm\KP 3、新建SCADA项目 4、新建Line 5、新建Device 6、拷贝Config目录下的KpMqtt_001.xml文件、KpMqtt_Job.js文件到项目Comm\Config下,如下示例链接 C:\SCADA\Projects\MQTTProject\Instances\Defau

mumanquan1的博客 3007

string char*互相转换

string char*互相转换,char*/const char*

grllery的博客 3万+

k8s集群部署私有镜像仓库

本文介绍了在Kubernetes集群中部署私有镜像仓库的完整方案。使用registry:2镜像创建Deployment,通过NodePort(30500)暴露服务,并采用hostPath(/data/registry)实现数据持久化。部署过程包括节点标记、YAML配置、资源创建及验证步骤,同时提供了Docker和Containerd两种环境下的详细使用方法,包括配置不信任私有仓库、镜像推送/拉取操作指南。该方案特别适合开发测试环境,为团队提供便捷的本地镜像管理能力。

weixin_42728286的博客 893

微信小程序获取用户手机号全流程实战(附完整代码)

本文详细介绍了微信小程序获取用户手机号的全流程实战,包括前端授权、后端解密及安全合规要点。通过传统授权按钮和新版手机号快速验证组件两种方案,帮助开发者高效实现功能,并附完整代码示例。重点解析了微信小程序接口的使用技巧和常见问题解决方案,确保数据安全与用户体验。

weixin_29280219的博客 569

string 与char *的区别

string是STL当中的一个容器,对其进行了封装,所以操作起来非常方便。 char *是一个指针,可以指向一个字符串数组,至于这个数组可以在栈上分配,也可以在堆上分配,堆得话就要你手动释放了。 string的内存管理是由系统处理,除非系统内存池用完,不然不会出现这种内存问题。 char *的内存管理由用户自己处理,很容易出现内存不足的问题。 char *s="string"的内容是不可以改的;c...

物联网小镇的博客 2692

dify制作的工作流如何通过API调用

本文介绍了如何通过Python程序调用Dify工作流API实现数据处理功能。文章详细展示了workflow和chatflow的调用方法,包括参数设置和结果输出,并提供了一个完整的API调用工具代码示例。该工具可实现文本处理、成果查重、关键词生成等功能,支持通过Python脚本或Postman进行调用。核心代码包含API请求函数和批量处理函数,通过HTTP请求与Dify服务端交互,实现自动化数据处理流程。

hhue2007的专栏 935

C++ string、const char*、 char* 、char[ ]区别及相互转换

string、const char*、 char* 、char[ ]

weixin_42310302的博客 3265

《QGIS快速入门与应用基础》239:指北针样式选择(预设/自定义)

系统解析指北针设计的核心规范与实操方法。文章首先强调行业规范红线,包括强制要求N字标注、箭头辨识度等关键要素,通过正误示例对比强化合规意识。其次详细讲解QGIS内置预设样式的分类应用,提供极简箭头、标准三角箭头等4类样式的选型对照表,并配图说明适用场景。最后介绍从基础微调到SVG导入的进阶自定义方法,帮助用户实现从合规到专业的样式设计。全文贯穿"合规优先、可读为本、美观为辅"原则,配有详细操作截图与规范对照表,适合从GIS新手到专业制图人员参考。

LuckyHanMo的博客 532

BOSS直聘数据采集、解析处理、分析与可视化实战

招聘和求职是一对永恒的话题,不论什么时候都有招聘或者是求职的需求,找不找得到工作可能最主要的就是匹配度是否高,待遇福利是否诱人,如今互联网的快速发展,找工作的方式早已发生了翻天覆地的变化,从以往的面对面形式的招聘简历投递和面试方式,变成了电子简历网络直接投递、远程面试录用的形式,便捷性大大提升,需求的快速增长,促生了一批互联网招聘类的企业,诸如:51job、BOSS直聘、拉勾网等等,为了能...

Together_CZ的博客 9025

C++中string、char、char*、const char、const char*详解及相关函数及相互转换

一、各个之间相互的转换 1.string转const char* string s ="abc"; const char* c_s = s.c_str(); 2.const char*转string //直接赋值即可 const char* c_s ="abc"; string s(c_s); 3.string转char* //方法一 string s ="abc"; char...

m0_37350758的博客 4224

【数据湖仓】:Iceberg、Hudi 和 Paimon 对比

适用于需要多计算引擎支持和复杂查询的离线批处理场景。其中立性和灵活性使其成为构建新型数据平台的理想选择。:在需要高频数据更新和高效小文件管理的场景中表现出色,适合实时数据处理和增量数据更新的业务需求。:专为实时流式数据处理设计,适用于对数据实时性要求高的业务场景,如实时数据分析和实时指标监控。通过以上分析,可以看出 Apache Iceberg、Apache Hudi 和 Apache Paimon 各有其独特的优势和适用场景。企业应根据自身业务需求和技术栈选择合适的数据湖仓方案,以充分发挥其价值。

欢迎来到我的博客,一起探索代码里的世界! 1611

C++中字符串类型之间的互转 string、const char*、 char* 、char[]相互转换

参考博客:https://blog.youkuaiyun.com/ksws0292756/article/details/79432329?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1&utm_source=distribute.pc_relevant.none-ta...

Littlehero_121的博客 1560

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C++中char[]、char*、const char*和string的相互转换

提示:以下是本篇文章正文内容,下面案例可供参考字符串之间的转换对于C++十分有用,希望对你有帮助,如有其他更好的转换方法,欢迎交流!如有错误,欢迎指出。

weixin_65205994的博客 4552

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C++ string、const char*、 char* 、char[ ]相互转换(全)

string、const char*、 char* 、char[]四者类型经常会需要转化。 一:转化总结形式如下: 使用时,要对源格式和目标格式进行初始化。源格式赋值为具体的内容,目标格式赋值为空。 \ 目标格式 源格式 string const char* char* char[ ] string NULL cons...

love、reading的博客 6636

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

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

c++ string、char*、const char* 、char[ ]转换

1.string =&gt; const char* string s = "abc"; const char* c_c = s.c_str(); or string s = "abc"; const char* c_c = s.data(); 2.const char* =&gt; string const char* c_c = "abc"; strings(c_c); 3....

放学你别走、学校后门见 398

C++ 字符串、string、char *、char[]、const char*的转换和区别

1.字符串 字符串本质就是一串字符,在C++中大家想到字符串往往第一反应是std::string(后面简称string) 字符串得从C语言说起,string其实是个类,C语言是没有class的,所以C语言的字符串其实就是字符数组,也就是char [ ] ,例如: char  str[10];   //定义了一个有十个元素的数组,元素类型为字符char char  str[10] = {"hel...

Stay Hungry 1万+

C++ char*、const char*和string 三者转换

C++ char*、const char*和string 三者转换

wangnaisheng的专栏 2456

C++中string、char*、char[]、const char*的转换问题

string转char* char* c; std::string s="1234"; strcpy(c,s.c_str()); 以下是错误写法 ❌ std::string s = "Chelse"; const char *str = s.c_str(); std::cout << str << std::endl; s[1] = 'm'; std::cout <...

weixin_42156097的博客 304

C++ string和char *,const*之间的转换

void strToCstChar(string str) { const char * uchar = str.c_str(); cout<< uchar << endl; } void strToChar(string str) { char *ch = new char[str.length()]; int len = str.length(); //ch = (char *)m

zzj806683450的专栏 2194

C/C++ 之 char*,const char*和string 三者转换

1. const char*和string的转换 (1) const char*转换为 string,直接赋值即可。 const char* tmp = "tsinghua". string s = tmp; (2) string转换为const char*,利用c_str() string s = "tsinghua"; const char*tmp = s.

稚枭天卓 1329
上一篇: C++中strlen函数
下一篇: 第五章 字符串专题 ---------------- 5.4 实践:替换字符串中的空格
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值