//標准庫的string類提供了三個成員函數來從一個string得到c類型的字符數組 //主要介紹c_str //c_str():生成一個const char*指針,指向以空字符終止的數組。 //這個數組應該是string類內部的數組
#include <iostream>
//需要包含cstring的字符串
#include <cstring>
using namespace std; int main() { //string-->char* //c_str()函數返回一個指向正規C字符串的指針, 內容與本string串相同 //這個數組的數據是臨時的,當有一個改變這些數據的成員函數被調用后,其中的數據就會失效。 //因此要么現用先轉換,要么把它的數據復制到用戶自己可以管理的內存中
const char *c; string s = "1234"; c = s.c_str(); cout<<c<<endl; s = "abcde"; cout<<c<<endl; }
結果是:
上面如果繼續用c指針的話,導致的錯誤將是不可想象的。就如:1234變為abcde
其實上面的c = s.c_str(); 不是一個好習慣。既然c指針指向的內容容易失效,我們就應該按照上面的方法,那怎么把數據復制出來呢?這就要用到strcpy等函數(推薦)。
//標准庫的string類提供了三個成員函數來從一個string得到c類型的字符數組 //主要介紹c_str //c_str():生成一個const char*指針,指向以空字符終止的數組。 //這個數組應該是string類內部的數組 #include <iostream> //需要包含cstring的字符串 #include <cstring> using namespace std; int main() { //更好的方法是將string數組中的內容復制出來 所以會用到strcpy()這個函數 char *c = new char[20]; string s = "1234"; // c_str()返回一個客戶程序可讀不可改的指向字符數組的指針,不需要手動釋放或刪除這個指針。 strcpy(c,s.c_str()); cout<<c<<endl; s = "abcd"; cout<<c<<endl; }