![](/img/trans.png)
[英]Convert string in '\\x00\\x00\\x00' format to unsigned char array
[英]Why does std::string(“\x00”) report length of 0?
我有一個需要對字符串進行編碼的函數,該函數需要能夠接受0x00作為有效的“字節”。 我的程序需要檢查字符串的長度,但是如果我將"\\x00"
傳遞給std::string
則length()
方法將返回0。
即使字符串是單個空字符,如何獲得實際長度?
std::string
完全能夠存儲空值。 但是,您必須警惕,因為不是const char*
,並且非常簡短地構造了const char*
,從中可以創建std::string
。
std::string a("\x00");
這將創建一個僅包含空字符和后跟一個空終止符的常量C字符串。 但是C字符串不知道它們有多長。 因此字符串認為它一直運行到第一個空終止符(即第一個字符)為止。 因此,創建了一個零長度的字符串。
std::string b("");
b.push_back('\0');
std::string
為null-clean。 字符( \\0
)也可以自由為零字節。 因此,在這里,沒有什么阻止我們正確讀取數據結構。 b
的長度將為1
。
通常,您需要避免構造包含空字符的C字符串。 如果您將文件中的輸入直接讀取到std::string
或者確保一次將一個字符推入一個,則可以獲得所需的結果。 如果您確實需要一個包含空字符的常量字符串,請考慮使用其他一些前哨字符而不是\\0
,然后(如果確實需要)在加載到std::string
之后將這些字符替換為'\\0'
。
您正在傳遞一個空字符串。 使用std::string(1, '\\0')
代替。
或std::string{ '\\0' }
(感謝@ zett42)
在C ++ 14中,可以使用字符串文字運算符存儲具有空字節的字符串:
using namespace std::string_literals;
std::string a = "\0"s;
std::string aa = "\0\0"s; // two null bytes are supported too
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.