日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++中的string 类型占几个字节

發布時間:2025/6/15 c/c++ 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++中的string 类型占几个字节 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++中的string 類型占幾個字節

一:先看一道面面試題:

題目是要求輸出:TrendMicroSoftUSCN 然后要求修改程序,使程序能輸出以上結果.代碼如下:

#include <iostream> #include <string> using namespace std; int main(int argc,char * argv[]) {string strArr1[]={ “Trend “, “Micro “, “soft “};string *p=new string[2];p[0]= “US “;p[1]= “CN “;cout < <sizeof(strArr1) < <endl;cout < <sizeof(p) < <endl;cout < <sizeof(string) < <endl;for(int i=0;i <sizeof(strArr1)/sizeof(string);i++)cout < <strArr1;for(i=0;i <sizeof(p)/sizeof(string);i++)cout < <p;cout < <endl; }

修改之后的程序:

#include <iostream> #include <string> using namespace std; int main(int argc,char * argv[]) {string strArr1[]={"Trend","Micro","soft"};string *p=new string[2];p[0]= "US";p[1]= "CN";cout<<"sizeof(strArr1):"<<sizeof(strArr1)<<endl;cout<<"sizeof(p):"<<sizeof(p)<<endl;cout<<"sizeof(string):"<<sizeof(string) <<endl;for(int i=0;i<sizeof(strArr1)/sizeof(string);i++)cout<<strArr1[i];for(int i=0;i<sizeof(*p)*2/sizeof(string);i++)cout <<p[i];cout<<endl; }

注意:sizeof(strarr1)表示該數組所占空間,相當于sizeof(string)*3,而sizeof(p),指針所占的空間均為4,*p,才是其所指占用的空間。

如果:

二:在C語言中我們操作字符串肯定用到的是指針或者數組,這樣相對來說對字符串的處理還是比較麻煩的,好在C++中提供了string 類型的支持,讓我們在處理字符串時方便了許多。

#include <iostream> using namespace std;int main(void) {string str_test1; string str_test2 = "Hello World"; int value1, value2, value3; value1 = sizeof(str_test1); value2 = sizeof(str_test2); value3 = sizeof(string);cout<<"str_test1占 "<<value1<<" 個字節"<<endl; cout<<"str_test2占 "<<value2<<" 個字節"<<endl; cout<<"string占 "<<value3<<" 個字節"<<endl; system("pause"); return 0; }

首先,我用G++編譯運行,得到的結果如下圖所示:

這說明string占4個字節。之后,我用VS2012編譯運行,得到的結果如下圖所示:

奇怪,這里string竟然占28個字節。
這里,我們注意觀察,還會發現一個問題,不管有沒有對string類型的變量賦值,或者是賦什么值,得到的結果是一樣的。

下面,來解釋上述問題:
string的實現在各庫中可能有所不同,但是在同一庫中相同一點是,無論你的string里放多長的字符串,它的sizeof()都是固定的,字符串所占的空間是從堆中動態分配的,與sizeof()無關。 ? ?sizeof(string)=4可能是最典型的實現之一,不過也有sizeof()為12、32字節的庫實現。通常,我們所用到的 string 類型一般都會是這樣實現:
?

class{ char *_Ptr; //指向字符串的指針 int _Len; //字符串的長度 ........ };

所以,我們一般接觸到的string類型所占字節數為 8+。

總結

以上是生活随笔為你收集整理的C++中的string 类型占几个字节的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。