string 與char *的區別


轉自https://blog.csdn.net/u010275850/article/details/77512695

https://blog.csdn.net/steft/article/details/60126077

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());
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM