C++中const char*, string 与char*的转化

原文:https://blog.csdn.net/zhang_alongzd/article/details/52790905

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhang_alongzd/article/details/52790905

1:string转化成const char*

可以通过调用string类中的c_str函数实现string向const char*的转换

[cpp] view plaincopy
  1. //string与const char*转换
  2. string s = "string_To_const char* ";
  3. const char *c_s=s.c_str();
[cpp] view plaincopy
  1. const char *c_ss = s.data();

还可以直接使用string类中的data()函数,直接对const char *赋值

但是c_s并不是不变的,如果在之后改变了s的内容,c_s仍然会随着改变,这样就会造成不可弥补的错误!所以需要重新定义变量开内存管理c_s指针;

2:const char*转换成string

利用string的一个构造函数对string类的对象赋值即可

[cpp] view plaincopy
  1. //const char*转换string
  2. const char* p = "const char* _To_string";
  3. string y(p);

3:string与char*的转换

string不能直接转换为char*,需要通过其他的方法来实现,现在简单介绍几种方法:

1:通过函数strcpy来实现;

[cpp] view plaincopy
  1. //string与char*的转换
  2. string ppp = "stringTochar*";
  3. char* c;
  4. const int len = ppp.length();
  5. c=new char[len+1];
  6. strcpy(c,ppp.c_str());

这里需要注意:1):给char* c分配内存空间时需要length()+1,因为字符指针c最后有一个‘\0’结尾;2):使用strcpy函数时系统会报错,在项目属性->C\C++预处理器->预处理器定义里面加入_CRT_SECURE_NO_WARNINGS;

2:通过copy函数实现:
[cpp] view plaincopy
  1. string ppp = "stringTochar*";
  2. char *d;
  3. d=new char[len+1];
  4. *(d+len)='\0';
  5. ppp.copy(d,len,0);

这里一定要加上第四句语句因为char* 最后有一个'\0',如果不进行赋值的话结果就会出现乱码;

4:char*转化成string
直接赋值即可:
[cpp] view plaincopy
  1. //char*与string的转换
  2. char* pp = "stringTochar*";
  3. string q(pp);

5:const char*转化成char*

使用strcpy函数即可
[cpp] view plaincopy
  1. //const char*转化成char*
  2. const char* csc = "constchar*Tochar*";
  3. char* cc;
  4. int length = strlen(csc);
  5. cc = new char[length+1];
  6. strcpy(cc,csc);
  7. cout<<cc<<"   "<<csc<<endl;

下面给出代码和结果:

[cpp] view plaincopy
  1. // string.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include<iostream>
  5. #include<string>
  6. #pragma warning(disable:4996)
  7. using namespace std;
  8. int _tmain(int argc, _TCHAR* argv[])
  9. {
  10. //string与const char*转换
  11. string s = "string_To_constchar*";
  12. const char *c_s=s.c_str();
  13. const char *c_ss = s.data();
  14. cout<<s<<"   "<<c_s<<"   "<<c_ss<<endl;
  15. //const char*转换string
  16. const char* p = "constchar*_To_string";
  17. string y(p);
  18. cout<<p<<"   "<<y<<endl;
  19. //char*与string的转换
  20. char* pp = "stringTochar*";
  21. string q(pp);
  22. cout<<pp<<"   "<<q<<endl;
  23. //string与char*的转换
  24. string ppp = "stringTochar*";
  25. char* c;
  26. const int len = ppp.length();
  27. c=new char[len+1];
  28. strcpy(c,ppp.c_str());
  29. char *d;
  30. d=new char[len+1];
  31. *(d+len)='\0';
  32. ppp.copy(d,len,0);
  33. cout<<ppp<<"   "<<c<<"   "<<d<<endl;
  34. //const char*转化成char*
  35. const char* csc = "constchar*Tochar*";
  36. char* cc;
  37. int length = strlen(csc);
  38. cc = new char[length+1];
  39. strcpy(cc,csc);
  40. cout<<cc<<"   "<<csc<<endl;
  41. cin.get();
  42. cin.get();
  43. return 0;
  44. }

运行结果:

C++中const char*, string 与char*的转化相关推荐

  1. HOW TO:在 Visual C++ .NET 中从 System::String* 转换为 Char*

    http://support.microsoft.com/kb/311259 方法 1 PtrToStringChars 指定了一个指向实际 String 对象的内部指针.如果将此指针传递给非托管函数 ...

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

    目录 1.char[].char*转string 2.string转char*.char[] 1.char[].char*转string char[].插入*转string比较简单,直接赋值即可进行转 ...

  3. MFCC中CString, int, string, char之间的转换

    1.    CString  -->  char* (1)传给未分配内存的指针 CString cstr ="ASDDSD"; char *ch =cstr.GetBuffe ...

  4. 转一篇很牛的文章,说明string、char和char*、char**等的使用

    大气象学习园地 博客园 新闻 新随笔 管理 订阅 随笔- 664  文章- 1  评论- 2646  C++二级指针char **的用法 char **p和char *p[]基本一样, 区别讲不出来, ...

  5. string、char *、char []之间的相互转换

    最近工作中遇到了string.char *.char []之间的相互转换,今天终于抽出时间将他们之间的转换记录下来,使用的是CodeBlocks软件,编译器为GNU GCC compiler,下面看代 ...

  6. CString转char * ,string

    CString 头文件#include <afx.h> string 头文件#include <string.h> CString 转char * CString cstr; ...

  7. STL中map和string, vector 用法详解

    1. map 用法详解 std map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成 ...

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

    C++中string.char *.char[]的转换 头段时间有人问过我这个问题,可是我一点头绪都没有,直接说不会.现在从网上找了点资料,看了看,知道点东西了. 一.string转char*. 主要 ...

  9. C/C++中输入带空格的字符串 string 转 char*

    在C和C++中,用普通的方法输入带空格的字符串时,得不到后续的数据.想要在字符串中包含空格可以使用以下方法: (1)使用正则表达式 scanf("%[^\n]]",str); // ...

最新文章

  1. 注意!在subList生成子列表之后,一定不要随便更改原列表
  2. 为什么即使在班级均衡的情况下,准确度仍然令人困扰
  3. C#+HtmlAgilityPack+Dapper走一波爬虫
  4. HDU 2004 成绩转换
  5. 121 Python程序中的线程操作-线程定时器
  6. java来电报名字的软件_读短信来电报姓名
  7. 大众点评App的短视频耗电量优化实战
  8. 2020最新广告法_2020最新广告法全文解读
  9. python星号直角三角形边长公式_三角形边长计算公式大全
  10. 幼儿园计算机和网络安全情况,幼儿园网络安全自查报告
  11. C语言负整数在内存中的存储
  12. vs上C/C++并行计算#pragma omp
  13. [UE4]打包运行时提示Plugin ‘‘ failed to load because module ‘‘ could not be found.缺少插件解决方法
  14. 使用java计算数组方差和标准差
  15. Unity开发笔记(五)—— 制作第四个小游戏《坦克大战》
  16. nginx-php类似nginx-lua的扩展,nginx-php中文开发文档
  17. springboot整合mybatisplus配置多数据源
  18. Ctrl组合快捷键大全
  19. STM8L自带bootloader使用教程(即使用Boot ROM升级)
  20. 设计模式之禅之接口隔离原则

热门文章

  1. 初中计算机flash操作,初中信息技术FLASH基础知识
  2. c语言均值滤波程序,10种简单的数字滤波算法(C语言源程序)
  3. Design Pattern - Decorator(C#)
  4. java spring 服务器关闭_通过springboot怎么停止服务器??
  5. oracle 创建 触发,Oracle 创建触发器
  6. linux无法挂载移动硬盘6,FC6下挂载NTFS移动硬盘,无法读取
  7. 皮一皮:皇上,他在下毒!
  8. Spring Cloud Alibaba 2.2.6发布:新增Nacos注册快速失败的配置
  9. 什么是充血模型?什么又是贫血模型?
  10. 以为是行废代码,原来有这作用!