如果程式的某處需要乙個c風格的字串(字串最後乙個字元後面跟著乙個空字元' \0 '),無法直接用string物件來代替它。
例如:不能用string物件直接初始化指向字元的指標。為了完成該功能,string專門提供了c_str()的成員函式;
string s("helloworld");
char *str = s;//錯誤:不能用string物件初始化char *
const char * str = s.c_str();//正確
注意:1. c_str()函式的返回結果是乙個指標,該指標指向乙個以空字元結束的字元陣列,而這個陣列所存的資料恰好與那個string物件一樣。
結果指標的型別是const char *,從而確保我們不會改變字元陣列的內容。
2. 我們無法保證c_str函式返回的陣列一直有效,事實上在上例中,如果後續的操作改變了s的值就可能讓之前返回的陣列失去效用。如果執行完c_str()函式後程式想一直都能使用其返回的陣列,最好將該陣列重新拷貝乙份。
#include
#include
#include
using namespace std;
int main()
{string a("helloworld");
const char *str = a.c_str(); //直接在初始化的時候賦值
cout《輸出:
helloworld
china
helloworld
C 3 混用string物件和C風格字串
如果程式的某處需要乙個c風格字串,無法直接用string物件來代替它。如 string s leo char str s 錯誤 不能用string物件初始化char 為了完成該功能,string專門提供了乙個名為c str的成員函式 const char str s.c str 正確如果需要char...
string和C風格字串
include include include include 雖然改變s後,仍然輸出正確,但是切記 無法保證c str 返回的陣列一直有效,保險做法是拷貝乙份 改進後 include include include include 雖然改變s後,仍然輸出正確,但是切記 無法保證c str 返回的陣...
string物件和C風格字串
我們都知道允許使用字串字面值來初始化string物件 string s hello world c 規定,任何出現字串字面值的地方都可以用以空字元結束的字元陣列來替代 上述性質反過來並不成立 如果程式的某處需要乙個c風格字串,無法直接用string物件來替代它。例如 不能使用string物件直接初始...