1、從C++標准上的解釋來看,只有一點區別:
c_str() 返回一個指向正規C字符串的指針常量,該指針保證指向一個 size() + 1 長度的空間,而且最后一個字符肯定是 \0 ;
而 data() 返回的指針則保證指向一個size()長度的空間,不保證有沒有null-terminate,可能有,可能沒有,看庫的實現了。
2、有的STL的實現中,二者是完全一樣的,如vs7.1,兩個函數的源碼中,data()函數內部調用的是c_str():
const _Elem *c_str() const { // return pointer to null-terminated nonmutable array return (_Myptr()); } const _Elem *data() const { // return pointer to nonmutable array return (c_str()); }