【STL】string中c_str()、data()函式的用法
阿新 • • 發佈:2019-01-06
標準庫的string類提供了3個成員函式來從一個string得到c型別的字元陣列:c_str()、data()、copy(p,n)。
1. c_str():生成一個const char*指標,指向以空字元終止的陣列。注:
①這個陣列的資料是臨時的,當有一個改變這些資料的成員函式被呼叫後,其中的資料就會失效。因此要麼現用先轉換,要麼把它的資料複製到使用者自己可以管理的記憶體中。注意。看下例:
[cpp] view plain copy print?
上面如果繼續用c指標的話,導致的錯誤將是不可想象的。就如:1234變為abcd
其實上面的c = s.c_str(); 不是一個好習慣。既然c指標指向的內容容易失效,我們就應該按照上面的方法,那怎麼把資料複製出來呢?這就要用到strcpy, strcpy_s等函式(推薦)。
[cpp] view plain copy print?
注意:不能再像上面一樣①所示了,const還怎麼向裡面寫入值啊;也不能②所示,使用了未初始化的區域性變數“c”,執行會出錯的 。
② c_str()返回一個客戶程式可讀不可改的指向字元陣列的指標,不需要手動釋放或刪除這個指標。指標的生命週期與string一致。
1. c_str():生成一個const char*指標,指向以空字元終止的陣列。注:
①這個陣列的資料是臨時的,當有一個改變這些資料的成員函式被呼叫後,其中的資料就會失效。因此要麼現用先轉換,要麼把它的資料複製到使用者自己可以管理的記憶體中。注意。看下例:
[cpp] view plain copy print?
- constchar* c;
- std::string s = "1234";
- c = s.c_str();
-
std::cout << c << std::endl; //輸出:1234
- s = "abcd";
- std::cout << c << std::endl; //輸出:abcd
上面如果繼續用c指標的話,導致的錯誤將是不可想象的。就如:1234變為abcd
其實上面的c = s.c_str(); 不是一個好習慣。既然c指標指向的內容容易失效,我們就應該按照上面的方法,那怎麼把資料複製出來呢?這就要用到strcpy, strcpy_s等函式(推薦)。
[cpp] view plain copy print?
- char* c = newchar;
- std::string s = "1234";
- // c = s.c_str();
-
strcpy_s(c, s.size() + 1, s.c_str());
- std::cout << c << std::endl; //輸出:1234
- s = "abcd";
- std::cout << c << std::endl; //輸出:1234
注意:不能再像上面一樣①所示了,const還怎麼向裡面寫入值啊;也不能②所示,使用了未初始化的區域性變數“c”,執行會出錯的 。
② c_str()返回一個客戶程式可讀不可改的指向字元陣列的指標,不需要手動釋放或刪除這個指標。指標的生命週期與string一致。
2. data():與c_str()類似,但是返回的陣列不以空字元終止。
網址:http://blog.csdn.net/huang_xw/article/details/7908582