我想要得到的字節是std::string
的字符串佔用的內存,而不是字符數。該字符串包含一個多字節字符串。 std::string::size()
會爲我做這個嗎?以字節爲單位獲取std :: string的字符串的大小
編輯:另外,size()
也包括終止NULL
?
我想要得到的字節是std::string
的字符串佔用的內存,而不是字符數。該字符串包含一個多字節字符串。 std::string::size()
會爲我做這個嗎?以字節爲單位獲取std :: string的字符串的大小
編輯:另外,size()
也包括終止NULL
?
std::string
對字節進行操作,而不是對Unicode字符進行操作,所以std::string::size()
確實會返回字節數據的大小(當然,無需std::string
需要存儲數據的開銷)。
不,std::string
只存儲您告訴它存儲的數據(它不需要尾隨的NULL
字符)。所以它不會被包含在大小中,除非你明確地創建了一個尾隨NULL
字符的字符串。
是的,size()會給你字符串中的數字char
。多字節編碼中的一個字符佔用多個char
。
std::string::size()
確實是以字節爲單位的大小。
要獲得字符串使用的內存量,您必須將capacity()
與用於管理的開銷相加。請注意,它是capacity()
而不是size()
。容量決定分配的字符數量(charT
),而size()
會告訴您其中有多少實際使用中。
尤其std::string
實現通常不* shrink_to_fit *的內容,因此,如果您創建一個字符串,然後從年底的元素,在size()
將遞減,但在大多數情況下(這被定義實現)capacity()
將不會。
某些實現可能不會分配所需的確切內存量,而是獲取給定大小的塊以減少內存碎片。在對字符串使用兩個大小的塊的功能的實現中,大小爲17
的字符串可以分配多達32
個字符。
你可能是迂腐一下:
std::string x("X");
std::cout << x.size() * sizeof(std::string::value_type);
不過的std :: string :: value_type的是焦炭和sizeof(char)的定義爲1
如果這僅成爲重要的typedef的字符串類型(因爲它可能會在將來更改或由於編譯器選項)。
// Some header file:
typedef std::basic_string<T_CHAR> T_string;
// Source a million miles away
T_string x("X");
std::cout << x.size() * sizeof(T_string::value_type);
可以說std :: string與char數組相同嗎?或者有什麼重大差異? – rzetterberg 2011-06-04 08:11:55
是的,char數組正是'std :: string'的意思。 'std :: string'和'std :: vector'之間存在一些實現差異,但它們存儲的數據是相同的。 –
2011-06-04 08:15:37
只是想指出'std :: string :: size()'不包含'NULL'字符的原因是遵循'strlen'設置的約定,該約定也不包括它。爲了以最小的開銷實現'string :: c_str()'方法,'std :: string'的實際實現需要*存儲*來終止'NULL'。也許[這個問題](http://stackoverflow.com/q/4653745)解釋比我更好。 – rwong 2011-06-04 08:23:32