c++ string.c_str()小結

來源:互聯網
上載者:User

標籤:

c++

const char *c_str();c_str()函數返回一個指向正規C字串的指標常量, 內容與本string串相同.(其實它指向的是string對象內部真正的char緩衝區),所以返回const,以防止使用者的修改。這是為了與c語言相容,在c語言中沒有string類型,故必須通過string類對象的成員函數c_str()把string 對象轉換成c中的字串樣式。


操作c_str()函數的傳回值時,只能使用c字串的操作函數,如:strcpy()等函數.因為,string對象可能在使用後被解構函式釋放掉,那麼你所指向的內容就具有不確定性.

{

string var = "Olympic";

char *ptr = var.c_str();

}//還不能被編譯,因為va.c_str()返回臨時指標,賦值給ptr之後,在}結束之後,var對象就得析構,最後要使用ptr,就是垃圾內容

 

一,C語言的字串

在C語言裡,對字串的處理一項都是一件比較痛苦的事情,因為通常在實現字串的操作的時候都會用到最不容易駕馭的類型——指標。

比如下面這個例子:

//example 1:

char str[12] = "Hello";

char *p = str;

*p = ‘h‘;  //改變第一個字母

 

//example 2:

char *ptr = "Hello";

*ptr = ‘h‘;  //錯誤

 

第一個字串時用數組開闢的,它是可以改變的變數。而第二個字串則是一個常量,也就是字面值。ptr只是指向它的指標而已,而不能改變指向的內容。

要想通過指標來改變常量是錯誤,正確的寫法應該是用const指標。

const char *ptr = "Hello";

二,初識string類

正是因為C風格字串(以Null 字元結尾的字元數組)太過複雜難於掌握,不適合大程式的開發,所以C++標準庫定義了一種string類,定義在標頭檔<string>。注意<string.h>和<cstring>都是錯誤的,這兩個標頭檔主要定義C風格字串操作的一些方法,譬如strlen(), strcpy()等。第一個是C的標頭檔格式,而第二個是C++風格的標頭檔,但是和<string.h>是一樣的,它的目的是為了和C相容。

看下面例子:

//example 3:

string str("world");   //可以用C風格字串初始化

string words = "Hello";

string greet = words;

string  join = greet + words;  //可以像基本類型一樣操作

c++ string.c_str()小結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.