1. 程式人生 > >C++中c_str()函式的用法

C++中c_str()函式的用法

      1、標準庫的string類提供了3個成員函式來從一個string得到c型別的字元陣列:c_str()、data()、copy(p,n)。

        2、c_str()是Borland封裝的String類中的一個函式,它返回當前字串的首字元地址。換種說法,c_str()函式返回一個指向正規C字串的指標常量,內容與本string串相同。這是為了與C語言相容,在C語言中沒有string型別,故必須通過string類物件的成員函式c_str()把string物件轉換成C中的字串樣式。

      3、c_str()的原型是:const char*c_str() const;

      4、c_str()生成一個const char*指標,指向以空字元終止的陣列。(data()與c_str()類似,但是返回的陣列不以空字元終止。

      5、注意:一定要使用strcpy()等函式來操作c_str()返回的指標。例如下面這樣寫就是錯誤的:

char* c; 
string s="1234"; 
c = s.c_str();
      上述程式碼中,c最後指向的內容是垃圾,因為s物件被析構,其內容被處理,同時編譯器將會報錯。正確程式碼如下:
char *cstr,*p;
string str ("Please split this phrase into tokens");
cstr = new char [str.size()+1];
strcpy (cstr, str.c_str());
          6、如果一個函式要求char*引數,可以使用c_str()方法。

       7、copy(p,n,size_type _Off = 0):從string型別物件中至多複製n個字元到字元指標p指向的空間中。預設從首字元開始,但是也可以指定,開始的位置(記住從0開始)。返回真正從物件中複製的字元。第三個引數可以預設。以下程式碼顯示了copy()函式的用法:

string str ("Please split this phrase into tokens");
basic_string <char>:: size_type cc;
char arr[20] = {0};
basic_string <char>:: pointer arrayPtr = arr;
cc = str.copy(arrayPtr,10);
cout << "The number of copied characters in cc is: "<< cc << endl;
cout << "The copied characters array1 is: " << arrayPtr << endl;

參考資料: