C++ 中 string和char* 的区别

1、定义:

string:string是STL当中的一个容器,对其进行了封装,所以操作起来非常方便。

char*:char *是一个指针,可以指向一个字符串数组,至于这个数组可以在栈上分配,也可以在堆上分配,堆得话就要你手动释放了。

2、区别:

string的内存管理是由系统处理,除非系统内存池用完,不然不会出现这种内存问题。
char *的内存管理由用户自己处理,很容易出现内存不足的问题。

当我们要存一个串,但是不知道其他需要多少内存时, 用string来处理就最好不过了。
当你知道了存储的内存的时候,可以用char *,但是不如用string的好,用指针总会有
隐患。

用string还可以使用各种成员函数来处理串的每一个字符,方便处理。
用char *处理串,就不如string的方便了,没有相应的函数来直接调用,而是要自己编
写函数来完成串的处理,而且处理过程中用指针还很容易出现内存问题。

char *s="string"的内容是不可以改的;char s[10]="string"的内容是可以改的

3、注意:

当我们定义了一个string,就不能用scanf("%s",s)和printf("%s",s)输入输出。主要是因为%s要求后面是对象的首地址

4、转化:

当 string 直接转化成 const char *时,可以通过两个函数c_str(),data成员函数,例如:

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
string s="xiaoming";
const char *a=s.c_str();//去掉const会显示编译错误
const char *b=s.data();
printf("a:[%s],b:[%s]\n",a,b);
}

如果直接转化成char*也可以。但是我觉得这个还是挺麻烦的。

将char *转化成string,直接转化就可以。就是注意输出的问题:

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
char *a="xiaoming";
string s;
s=a;
printf("%s\n",s.c_str());
}
 

最新文章

  1. 【转载】Unity中矩阵的平移、旋转、缩放
  2. HTML基础(1)
  3. 一种读取Exchange的用户未读邮件数方法!
  4. 虚拟机Linux----Ubuntu1204----安装jdk1.8
  5. django - 修改 自增长id,起始值
  6. OC9_字符串的内存管理
  7. 【转】【可用】Android 登录判断器,登录成功后帮你准确跳转到目标activity
  8. Win32串口API
  9. jedis keys和scan操作
  10. [Swift]LeetCode187. 重复的DNA序列 | Repeated DNA Sequences
  11. 关于字符串split一些用法
  12. R8:Learning paths for Data Science[continuous updating…]
  13. Chrome浏览器查看 iframe信息 OpenFrame
  14. vue的props和$attrs
  15. 深入浅出 Java Concurrency (6): 锁机制 part 1 Lock与ReentrantLock
  16. NSSM - the Non-Sucking Service Manager
  17. Sublime Text3 配置Python3编译环境
  18. java开源内容管理系统J4CMS支持真正静态化
  19. IIS:连接数、并发连接数、最大并发工作线程数、应用程序池的队列长度、应用程序池的最大工作进程数详解
  20. 【Sets】使用Google Guava工程中Sets工具包,实现集合的并集/交集/补集/差集

热门文章

  1. 动态样式语言less初识
  2. 【LeetCode】寻找两个有序数组的中位数
  3. sql developer 17002报错无法连接
  4. 使用ES对中文文章进行分词,并进行词频统计排序
  5. pdfium:创建CreateNewDoc
  6. 201871010110-李华《面向对象程序设计(java)》第十周学习总结
  7. Java高级——泛型
  8. 万字长文把 VSCode 打造成 C++ 开发利器
  9. 毕业一年的大专生程序员工作总结(java后台)
  10. 【day05】css