C++中const char*, string 与char*的转化
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*的转换
- //string与const char*转换
- string s = "string_To_const char* ";
- const char *c_s=s.c_str();
- const char *c_ss = s.data();
还可以直接使用string类中的data()函数,直接对const char *赋值
但是c_s并不是不变的,如果在之后改变了s的内容,c_s仍然会随着改变,这样就会造成不可弥补的错误!所以需要重新定义变量开内存管理c_s指针;
2:const char*转换成string
利用string的一个构造函数对string类的对象赋值即可
- //const char*转换string
- const char* p = "const char* _To_string";
- string y(p);
3:string与char*的转换
string不能直接转换为char*,需要通过其他的方法来实现,现在简单介绍几种方法:
1:通过函数strcpy来实现;
- //string与char*的转换
- string ppp = "stringTochar*";
- char* c;
- const int len = ppp.length();
- c=new char[len+1];
- strcpy(c,ppp.c_str());
这里需要注意:1):给char* c分配内存空间时需要length()+1,因为字符指针c最后有一个‘\0’结尾;2):使用strcpy函数时系统会报错,在项目属性->C\C++预处理器->预处理器定义里面加入_CRT_SECURE_NO_WARNINGS;
- string ppp = "stringTochar*";
- char *d;
- d=new char[len+1];
- *(d+len)='\0';
- ppp.copy(d,len,0);
这里一定要加上第四句语句因为char* 最后有一个'\0',如果不进行赋值的话结果就会出现乱码;
- //char*与string的转换
- char* pp = "stringTochar*";
- string q(pp);
5:const char*转化成char*
- //const char*转化成char*
- const char* csc = "constchar*Tochar*";
- char* cc;
- int length = strlen(csc);
- cc = new char[length+1];
- strcpy(cc,csc);
- cout<<cc<<" "<<csc<<endl;
下面给出代码和结果:
- // string.cpp : 定义控制台应用程序的入口点。
- //
- #include "stdafx.h"
- #include<iostream>
- #include<string>
- #pragma warning(disable:4996)
- using namespace std;
- int _tmain(int argc, _TCHAR* argv[])
- {
- //string与const char*转换
- string s = "string_To_constchar*";
- const char *c_s=s.c_str();
- const char *c_ss = s.data();
- cout<<s<<" "<<c_s<<" "<<c_ss<<endl;
- //const char*转换string
- const char* p = "constchar*_To_string";
- string y(p);
- cout<<p<<" "<<y<<endl;
- //char*与string的转换
- char* pp = "stringTochar*";
- string q(pp);
- cout<<pp<<" "<<q<<endl;
- //string与char*的转换
- string ppp = "stringTochar*";
- char* c;
- const int len = ppp.length();
- c=new char[len+1];
- strcpy(c,ppp.c_str());
- char *d;
- d=new char[len+1];
- *(d+len)='\0';
- ppp.copy(d,len,0);
- cout<<ppp<<" "<<c<<" "<<d<<endl;
- //const char*转化成char*
- const char* csc = "constchar*Tochar*";
- char* cc;
- int length = strlen(csc);
- cc = new char[length+1];
- strcpy(cc,csc);
- cout<<cc<<" "<<csc<<endl;
- cin.get();
- cin.get();
- return 0;
- }
运行结果:
C++中const char*, string 与char*的转化相关推荐
- HOW TO:在 Visual C++ .NET 中从 System::String* 转换为 Char*
http://support.microsoft.com/kb/311259 方法 1 PtrToStringChars 指定了一个指向实际 String 对象的内部指针.如果将此指针传递给非托管函数 ...
- C++中string、char[]、char*之间的转换
目录 1.char[].char*转string 2.string转char*.char[] 1.char[].char*转string char[].插入*转string比较简单,直接赋值即可进行转 ...
- MFCC中CString, int, string, char之间的转换
1. CString --> char* (1)传给未分配内存的指针 CString cstr ="ASDDSD"; char *ch =cstr.GetBuffe ...
- 转一篇很牛的文章,说明string、char和char*、char**等的使用
大气象学习园地 博客园 新闻 新随笔 管理 订阅 随笔- 664 文章- 1 评论- 2646 C++二级指针char **的用法 char **p和char *p[]基本一样, 区别讲不出来, ...
- string、char *、char []之间的相互转换
最近工作中遇到了string.char *.char []之间的相互转换,今天终于抽出时间将他们之间的转换记录下来,使用的是CodeBlocks软件,编译器为GNU GCC compiler,下面看代 ...
- CString转char * ,string
CString 头文件#include <afx.h> string 头文件#include <string.h> CString 转char * CString cstr; ...
- STL中map和string, vector 用法详解
1. map 用法详解 std map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成 ...
- C++中string、char *、char[]的转换
C++中string.char *.char[]的转换 头段时间有人问过我这个问题,可是我一点头绪都没有,直接说不会.现在从网上找了点资料,看了看,知道点东西了. 一.string转char*. 主要 ...
- C/C++中输入带空格的字符串 string 转 char*
在C和C++中,用普通的方法输入带空格的字符串时,得不到后续的数据.想要在字符串中包含空格可以使用以下方法: (1)使用正则表达式 scanf("%[^\n]]",str); // ...
最新文章
- 注意!在subList生成子列表之后,一定不要随便更改原列表
- 为什么即使在班级均衡的情况下,准确度仍然令人困扰
- C#+HtmlAgilityPack+Dapper走一波爬虫
- HDU 2004 成绩转换
- 121 Python程序中的线程操作-线程定时器
- java来电报名字的软件_读短信来电报姓名
- 大众点评App的短视频耗电量优化实战
- 2020最新广告法_2020最新广告法全文解读
- python星号直角三角形边长公式_三角形边长计算公式大全
- 幼儿园计算机和网络安全情况,幼儿园网络安全自查报告
- C语言负整数在内存中的存储
- vs上C/C++并行计算#pragma omp
- [UE4]打包运行时提示Plugin ‘‘ failed to load because module ‘‘ could not be found.缺少插件解决方法
- 使用java计算数组方差和标准差
- Unity开发笔记(五)—— 制作第四个小游戏《坦克大战》
- nginx-php类似nginx-lua的扩展,nginx-php中文开发文档
- springboot整合mybatisplus配置多数据源
- Ctrl组合快捷键大全
- STM8L自带bootloader使用教程(即使用Boot ROM升级)
- 设计模式之禅之接口隔离原则
热门文章
- 初中计算机flash操作,初中信息技术FLASH基础知识
- c语言均值滤波程序,10种简单的数字滤波算法(C语言源程序)
- Design Pattern - Decorator(C#)
- java spring 服务器关闭_通过springboot怎么停止服务器??
- oracle 创建 触发,Oracle 创建触发器
- linux无法挂载移动硬盘6,FC6下挂载NTFS移动硬盘,无法读取
- 皮一皮:皇上,他在下毒!
- Spring Cloud Alibaba 2.2.6发布:新增Nacos注册快速失败的配置
- 什么是充血模型?什么又是贫血模型?
- 以为是行废代码,原来有这作用!