關於C語言列印string類字串的問題

2022-03-17 03:58:31 字數 1289 閱讀 7652

首先因為printf函式輸出字串是針對char *的,即printf只能輸出c語言的內建資料,而string不是c語言的內建資料。

其次string型別的物件不止包含字串,還包含了許多用於操作的函式,所以&str並非字串的首位址

因此該怎麼列印string字串呢?

1、利用string的成員函式c_str()列印,如下:

string q = "

123abcd";

printf("%s

", q.c_str());

2、強轉,將string型別強轉成char*型別,如下:

string q = "

123abcd";

char* a = (char*)q.data();

printf("%s

", a);

3、對string類物件的例項進行賦值時所產生的問題

該問題參考該帖子

先看下面的

先看看所出現的問題吧!

1、宣告了乙個string例項,使用c_str()進行賦值後,可以正常輸出c_str()的值,但是直接輸出string例項的實現,實際是空字串

2、在第乙個問題後,對string例項進行字串追加,然後對string和c_str()進行輸出.原來對字串變數被覆蓋了.

原因是什麼呢?

_str()介面是string類的乙個函式,返回的是字串的首位址,返回值型別是const char *的.如果要使用它並對其進行賦值操作,必須要使用strcpy函式.如果哦直接進行賦值,是不會賦值成功的.(小

知識:const char *是指向常量字串的指標.)

在string類中.c_str()的生命週期受到string類例項的影響.如果我們使用string物件例項進行賦值,字串被複製到乙個char*的成員變數,然後在呼叫c_str()的時候,會直接返回string類中維護的

char*成員的首位址.這樣也就能保證了使用string和c_str()都能輸出想要的字元值.

但是,在ddemo中,先使用strcpy對const char *進行強轉,然後進行賦值.雖然可以正常列印,但是對string物件中維護的成員沒有正確的維護.所以,當程序再次使用string物件進行賦值時.新對字元

其實,前面說的都是廢話,用一句話就可以說明,就是:在使用string中的c_str()進行字串賦值時,如果後面對string中的char*進行改變.那麼c_str()中的值就不在可靠了.

C 語言基礎(實現string類)

string類的實現 涉及到 拷貝構造函式呼叫的三種情況 深拷貝淺拷貝 const修飾為常函式 過載輸出 過載賦值運算子 過載下標運算子 拷貝構造函式呼叫的三種情況?1.用乙個物件初始另乙個物件 2.用物件作為實參傳遞給函式 3.函式的返回值為物件,建立臨時物件作為返回值 深拷貝在計算機中開闢了一塊...

C 語言基礎 16 string類

使用 string 類需要包含標頭檔案,下面的例子介紹了幾種定義 string 變數 物件 的方法 include include using namespace std intmain string s int len s.length cout 注意 與c不同,string末尾沒有 0 字元,所...

C 語言string類介紹和示例

在c語言中,用0結尾的字元陣列表示字串,c的字串有乙個問題,就是定義後大小不能改變,存入的內容只能比陣列小,不能大,如果不小心存多了,會引起記憶體的溢位,這個問題讓程式設計師很鬱悶。c 的string部分的解決了這個問題,它會隨存放字元的長度自動伸縮,程式設計師不必擔心記憶體溢位的問題。string...