“tr”和字串型別的string str = "tr"對比

firedragonpzy發表於2012-08-11
[i][b]本文為firedragonpzy原創,轉載務必在明顯處註明:
轉載自【Softeware MyZone】原文連結: http://www.firedragonpzy.com.cn/index.php/archives/1025[/b][/i]

 今天在研究sizeof的時候發現了一些比較有趣的現象,程式碼如下:
string str = "tr";
cout<<str.size()<<endl;//2
cout<<strlen(str.c_str())<<endl;//2
cout<<sizeof(str)<<endl;//32
cout<<str[1]<<endl;//r
//cout<<"tr".size()<<endl;//報錯
cout<<strlen("tr")<<endl;//2
cout<<sizeof("tr")<<endl;//3
cout<<"tr"[2]<<endl;空白
事實表明,str和"tr"是不一樣的,str是個string型別的物件,佔據32位byte的空間,而"tr"是char型別的陣列,末尾均以"\0"填充,而string型別的str是不以"\0"填充,這個是被string型別處理了。一個str和"tr"很明顯的區別就是"tr"根本就沒有size()的方法。
再說下sizeof和strlen的區別:
sizeof:取得是實際變數佔據的記憶體空間
strlen:取得是除去"\0"後變數佔據的記憶體空間

有關sizeof詳細可參考:[url]http://firedragonpzy.d3.tuidc.com/index.php/archives/1015[/url]

相關文章