zoukankan      html  css  js  c++  java
  • C++ 中 string和char* 的区别

    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]
    ",a,b);
    }
    复制代码

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

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

    复制代码
    #include<iostream>
    #include<stdio.h>
    using namespace std;
    int main()
    {
        char *a="xiaoming";
        string s;
        s=a;
        printf("%s
    ",s.c_str());
    }
    复制代码
     
  • 相关阅读:
    我的软考之路
    VB成员函数集锦
    关于软件维护问题的几点思考
    element样式调整用到的东西
    JS实现旋转的魔方
    关于echarts 重绘/图表切换/数据清空
    CSS3 @keyframes 实现匀速旋转魔方(搬运工)
    在vue的js文件引入自定义js文件
    记录 vue+element树节点的标注
    echarts 设置图例文本不可点击
  • 原文地址:https://www.cnblogs.com/tsingke/p/12075078.html
Copyright © 2011-2022 走看看