char*、char[]及string的区别及相互转换
来源:互联网 发布:武术 知乎 编辑:程序博客网 时间:2024/04/27 14:05
区别:
char *s1:s1是一个指向字符串的指针;
char s2[]:s2是一个字符数组;
string s3:s3是一个string类的对象.
【内存模型】
例如:
char *s1 = "hello";
char s2[] = "hello";
char s2[] = "hello";
内存模型如下
+-----+ +---+---+---+---+---+---+
s1: | *======> | h | e | l | l | o |\0 |
+-----+ +---+---+---+---+---+---+
+---+---+---+---+---+---+
s2: | h | e | l | l | o |\0 |
+---+---+---+---+---+---+
s1: | *======> | h | e | l | l | o |\0 |
+-----+ +---+---+---+---+---+---+
+---+---+---+---+---+---+
s2: | h | e | l | l | o |\0 |
+---+---+---+---+---+---+
转换:
1.string转换为char *:
- 如果要将string直接转换成const char *类型。string有2个函数可以运用。
一个是.c_str(),一个是.data成员函数。
例子如下:string s1 = "abcde"; const char *k = s1.c_str(); const char *t = s1.data(); printf("k:[%s] t:[%s]\n", k, t); system("pause");
如上,都可以输出。内容是一样的。但是只能转换成const char*,如果去掉const编译不能通过。(const char *指向的内存依赖string对象的生命周期) - 那么,如果要转换成char*,可以用string的一个成员函数copy实现。(因为内存是char *独立维护的,新申请的。等价于两份拷贝)
string s1 = "abcde"; char *data; int len = s1.length(); data = (char *)malloc((len + 1)*sizeof(char)); s1.copy(data, len, 0); data[len] = '\0'; printf("data:%s\n", data); printf("s1:%s\n", s1.c_str());
2.char *转换成string:
可以直接赋值(是内存拷贝赋值)
string s;
char *p = "adghrtyh";
s = p;
注:
char *p = "adghrtyh";
s = p;
注:
当我们定义了一个string类型之后,用printf("%s",s);输出是会出问题的。这是因为“%s”要求后面的对象的首地址。但是string不是这样的一个类型。所以肯定出错。用cout输出是没有问题的,若一定要printf输出。那么可以这样:printf("%s",s.c_str())。
3.char[] 转换成string:
同char *转换成sting
4、string转换成char[]:
char buf[10]; char nbuf[10]; string str("abcdeg"); strcpy(buf, str.c_str()); strncpy(nbuf, str.c_str(), str.length()); buf[str.length()] = '\0'; nbuf[str.length()] = '\0'; printf("buff:[%s] nbuff:[%s].\n", buf, nbuf);
5、QString 转换为 const char *:
(const char *)(QString).toLocal8Bit();
总结:
通过上述的转换可以发现,其核心仍是紧紧抓住了三者之间的区别。我们应从三者的区别入手,去体会他们之间的转换。
参考文章:
1、char* char[]及string的区别及相互转换
2、string 与char* char[]之间的转换
3、c++中char与string之间的相互转换问题
推荐阅读:
char数组与string转换
阅读全文
0 0
- char* char[]及string的区别及相互转换
- char* char[]及string的区别及相互转换
- char*、char[]及string的区别及相互转换
- char* char[]及string的区别及相互转换
- char* char[]及string之间的区别及转换
- char*,string,CString的区别及转换
- char[] ,char*,string 三者的区别及转换
- CString ,string,char *比较及相互转换
- CString,string,char*的综合比较及相互转换
- CString,string,char*的综合比较及相互转换
- CString,string,char*的综合比较及相互转换
- char*,const char*和string的区别以及相互转换
- char*,const char*,string的相互转换
- char* char[] string之间的相互转换
- char*,const char*和string 三者转换及区别
- String 、char* 的相互转换
- CString、char*、char[]、string、char之间的相互转换
- 【C++ / Java】char数组和string的相互转换及自动转换
- USB驱动----USB总线驱动程序
- 指向常量的指针、常量指针傻傻分不清楚
- BEGAN: Boundary Equilibrium Generative Adversarial Networks阅读笔记
- C++面向对象(2)
- 大数据企业架构以及产生的相关热门职位
- char*、char[]及string的区别及相互转换
- Javascript概述
- 设计模式之组合模式
- Java实现加密与减密
- uva 12563
- ECMAScript中数组的各种方法的整理
- php字符串函数大全
- 8月23日集训
- C++面向对象(三)