(C )正確地給string型別變數賦值

2021-08-28 15:04:47 字數 809 閱讀 4560

方法1:呼叫stl方法    建構函式 或 assign(賦值)方法

方法2(待商榷):指標操作  使用scanf("%s", &s[0]) 或 memcpy函式

#include#include#include#includeint main()
執行結果:

stl_str content:i'm a string. size:13 capacity:13

mem_str content:i'm a string. size:0 capacity:0

string提供的capacity方法返回已經分配給該串的儲存空間。通過記憶體拷貝的操作我們發現string無論是大小還是容量都沒有任何變化。記憶體拷貝破壞了stl的封裝。假如該string後存放有其他變數,那麼它們很容易就被破壞掉,而根本無法發現問題的根源所在。另外,此時通過string的size或length方法進行迴圈判斷時,會發現根本無法進入迴圈。原因就是stl根本沒有察覺到分配給自己的記憶體已經被改掉了,因此string的長度仍為初始值。

char cstr[10] = "a string";

string s;

s = cstr 或 s.assign(cstr) //assign 與 = 等價

把c++看作乙個語言聯邦(出自《effective c++》)

四種語言分別為:過程性的傳統c語言、物件導向部分、模板類,以及stl。

每當在四種程式設計形式中切換時,都要時刻注意四種形式的不同特點。

顯然,傳統c的指標操作在stl的領域中是未定義的。那麼,我們就絕對不能寫出類似於方法2的**。

正確地將物件賦值給物件本身了嗎

資料摘自自我賦值常常被錯誤地應用,考慮下面的一段 class string public string operator const string s private char data 我們會輕易地使用下面的方法來實現賦值 string string operator const string s...

如何正確地比較兩個double型別的資料

今天寫 發現乙個很有意思的問題。如下 double sum 0 for i 11213 i 11325 i printf sum f n sum double sum2 66.144421 if sum sum2 else double a 66.144421,b 66.144421 if a b ...

c語言中結構體型別變數型別,結構體變數名賦值

結構體的詳情參考本文件 這幾天看圖用領接表儲存圖時候,開始實現的時候發現對結構體的變數名賦值有些疑惑,疑惑的地方查了下,留做備份 此宣告宣告了擁有3個成員的結構體,分別為整型的a,字元型的b和雙精度的c 同時又宣告了結構體變數s1 這個結構體並沒有標明其標籤 struct s1 此宣告宣告了擁有3個...