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