来自 https://blog.csdn.net/rongrongyaofeiqi/article/details/52442169

https://blog.csdn.net/hebbely/article/details/79577880

简述:

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()函数

  1. string str = "hello";
  2. 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()函数

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

3) 调用string的copy()函数

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

2、char*转string

可以直接赋值

  1. string s;
  2. char *p = "hello";
  3. s = p;

3、string转char[]

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

  1. string pp = "dagah";
  2. char p[8];
  3. int i;
  4. for( i=0;i<pp.length();i++)
  5. p[i] = pp[i];
  6. p[i] = '\0';
  7. printf("%s\n",p);
  8. cout<<p;

4、char[] 转string

可以直接赋值

  1. string s;
  2. char ch[] = "hello world";
  3. s = ch;

5、char[]转char*

可以直接赋值

6、char*转char[]

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

7、代码实现

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

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

② string转char*

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

③ string转char[]

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

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

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

② const char*转char*

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

③ const char*转char[]

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

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

  1. int _tmain(intargc, _TCHAR* argv[])
  2. {
  3. char* c = "HelloWorld!"; //初始化char* 类型,并具体赋值
  4. std::string str; //初始化string类型
  5. str= c; //char*类型转string类型
  6. printf_s("%s\n", c); //打印char* 类型数据
  7. printf_s("%s\n", str.c_str()); //打印string类型数据
  8. return 0;
  9. }

② char*转const char*

  1. #include "stdafx.h"
  2. #include <iostream>
  3. int _tmain(intargc, _TCHAR* argv[])
  4. {
  5. char* c = "HelloWorld!"; //初始化char* 类型,并具体赋值
  6. const char* constc = nullptr; //初始化const char* 类型
  7. constc= c; //char*类型转const char* 类型
  8. printf_s("%s\n", c); //打印char* 类型数据
  9. printf_s("%s\n", constc); //打印const char* 类型数据
  10. return 0;
  11. }

③ char*转char[]

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

4)char[]转为其他类型

  1. #include "stdafx.h"
  2. #include <iostream>
  3. int _tmain(intargc, _TCHAR* argv[])
  4. {
  5. char arrc[20] = "HelloWorld!"; //初始化char[] 类型,并具体赋值
  6. std::string str; //初始化string
  7. const char* constc = nullptr; //初始化const char*
  8. char*c = nullptr; //初始化char*
  9. str= arrc; //char[]类型转string类型
  10. constc= arrc; //char[]类型转const char* 类型
  11. c= arrc; //char[]类型转char*类型
  12. printf_s("%s\n", arrc); //打印char[]类型数据
  13. printf_s("%s\n", str.c_str()); //打印string类型数据
  14. printf_s("%s\n", constc); //打印const char* 类型数据
  15. printf_s("%s\n", c); //打印char*类型数据
  16. return 0;
  17. }

const char* to char*(当函数传递参数时)的更多相关文章

  1. C++向main函数传递参数的方法(实例已上传至github)

    通常情况下,我们定义的main函数都只有空形参列表: int main(){...} 然而,有时我们确实需要给mian传递实参,一种常见的情况是用户设置一组选项来确定函数所要执行的操作.例如,假定ma ...

  2. Delphi过程函数传递参数的八种方式

    今天一同事问我为什么有些过程函数里面有Var而有些没有,不解,遂到网上百度,得解.快哉,快哉. 在Delphi过程.函数中传递参数几个修饰符为Const.Var.Out.另一种不加修饰符的为默认按值传 ...

  3. linux中probe函数传递参数的寻找(下)

    点击打开链接 linux中probe函数传递参数的寻找(下) 通过追寻driver的脚步,我们有了努力的方向:只有找到spi_bus_type的填充device即可,下面该从device去打通,当两个 ...

  4. Delphi过程函数传递参数的几种方式

    Delphi过程函数传递参数的几种方式  在Delphi过程.函数中传递参数几个修饰符为Const.Var.Out. 另一种不加修饰符的为默认按值传递参数. 一.默认方式以值方式传递参数 proced ...

  5. C++ 并发编程2 --向线程函数传递参数

    1向线程函数传递参数比较简单,一般的形式如下 void f(int i,std::string const& s);std::thread t(f,3, "hello"); ...

  6. python 函数传递参数的多种方法

    python中函数根据是否有返回值可以分为四种:无参数无返回值,无参数有返回值,有参数无返回值,有参数有返回值. Python中函数传递参数的形式主要有以下五种,分别为位置传递,关键字传递,默认值传递 ...

  7. scrapy回调函数传递参数

    scrapy.Request 的callback传参的两种方式 1.使用 lambda方式传递参数 def parse(self, response): for sel in response.xpa ...

  8. 【delphi】Delphi过程、函数传递参数的八种方式

    Delphi过程函数传递参数的八种方式

  9. 深入理解python中函数传递参数是值传递还是引用传递

    深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是"传对象引用 ...

随机推荐

  1. maven项目编译报错:Type Dynamic Web Module 3.0 requires Java 1.6 or newer.

    在maven的pom.xml文件中增加: <build>   <plugins>     <plugin>         <groupId>org.a ...

  2. Java使用freemarker导出word文档

    通过freemarker,以及JAVA,导出word文档. 共分为三步: 第一步:创建模板文件 第二步:通过JAVA创建返回值. 第三步:执行 分别介绍如下: 第一步: 首先创建word文档,按照想要 ...

  3. javasctipt之DOM知识点

    一:DOM节点 子节点:childNodes 父节点:parentNode offsetPrent 二:元素属性操作 方式一:xxx.style.xxx 方式二:xxx.style["xxx ...

  4. orm中的聚合函数,分组,F/Q查询,字段类,事务

    目录 一.聚合函数 1. 基础语法 2. Max Min Sum Avg Count用法 (1) Max()/Min() (2)Avg() (3)Count() (4)聚合函数联用 二.分组查询 1. ...

  5. 百度AI训练营笔记

    参加了两天百度AI训练营,简单记录一下学到的东西 一.知识图谱 知识图谱是让机器具有积累知识.运用知识的本领. 由于目前知识量很大,所以人工标注的方法无法满足,可以采用数据驱动.自底向上的方式自动构建 ...

  6. Spring MVC 面试题

    什么是springMVC?作用? springMVC是一种web层mvc框架,用于替代servlet(处理|响应请求,获取表单参数,表单校验等). 为什么要用springMVC? 基本上,框架的作用就 ...

  7. C# 3.0

    序言 自动实现的属性 匿名类型 查询表达式 Lambda 表达式 从 C# 3 开始,lambda 表达式提供了一种更简洁和富有表现力的方式来创建匿名函数. 使用 => 运算符构造 lambda ...

  8. Apicloud_(项目)网上书城01_前端搭建

    [本文皆在记录自己开发Apicloud项目过程,不具备教学水平性文章] 参考书籍<30天App开发从0到1> Apicloud_(项目)网上书城01_前端页面开发 传送门 Apicloud ...

  9. HTML和CSS 入门系列(一):超链接、选择器、颜色、盒模式、DIV布局、图片

    一.超链接 二.CSS选择器 CSS的全称叫做: Cascading Style Sheets 级联样式表的缩写. 2.1 类型选择器 2.2 派生选择器 2.3 伪类选择器 <style &g ...

  10. C++入门经典-例3.22-循环嵌套打印三角形

    1:代码如下: // 3.22.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> usin ...