我們都知道允許使用字串字面值來初始化string物件:
string s
("hello world!"
);
c++規定,任何出現字串字面值的地方都可以用以空字元結束的字元陣列來替代:
上述性質反過來並不成立:如果程式的某處需要乙個c風格字串,無法直接用string物件來替代它。
例如:不能使用string物件直接初始化指向字元的指標。為了實現這一功能,string專門提供了乙個名為c_str的成員函式:
char
*str = s;
// 錯誤:不能用string物件初始化char*
const
char
*str = s.c_str;
// 正確
函式返回結果使用乙個指標,該指標指向乙個以空字元結束的字元陣列,而這個陣列所存的資料恰好與哪個string物件的一樣。結果指標的型別是const char*,從而確保我們不會改變字元陣列的內容。
ps:由於我們無法保證c_str函式返回的陣列一直有效,如果後續的操作改變了s的值就可能讓之前返回的陣列失去效用。因此,如果執行完c_str()函式後程式想一直都能使用其返回的陣列,最好將該陣列重新拷貝乙份。
string和C風格字串
include include include include 雖然改變s後,仍然輸出正確,但是切記 無法保證c str 返回的陣列一直有效,保險做法是拷貝乙份 改進後 include include include include 雖然改變s後,仍然輸出正確,但是切記 無法保證c str 返回的陣...
C 3 混用string物件和C風格字串
如果程式的某處需要乙個c風格字串,無法直接用string物件來代替它。如 string s leo char str s 錯誤 不能用string物件初始化char 為了完成該功能,string專門提供了乙個名為c str的成員函式 const char str s.c str 正確如果需要char...
C風格字串與string
c風格字串並不是一種型別,它指的是一種程式設計習慣,指c語言中以 0 結尾的字串。c語言中沒有字串型別,通常用字串陣列來存放乙個字串 可以直接將乙個字串直接量 字面量 直接賦值給陣列 可以定義長度也可以不指定 編譯器會在字元陣列末尾自動的新增 0 作為串的結束符。用字串給字元陣列賦值時由於要新增結束...