1. 程式人生 > >string 與char *的區別

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