由於\ x00也是終止字符,我將如何得到一個帶有空字符\ x00的字符串?如何將終止NUL字符 x00轉換爲字符串?
我確實需要它作爲我的程序的一部分。
我需要的字符串是「\ x00 \ x00 \ x00 \ x00」。有一些特殊的語法嗎?它是什麼?
由於\ x00也是終止字符,我將如何得到一個帶有空字符\ x00的字符串?如何將終止NUL字符 x00轉換爲字符串?
我確實需要它作爲我的程序的一部分。
我需要的字符串是「\ x00 \ x00 \ x00 \ x00」。有一些特殊的語法嗎?它是什麼?
std::string str("\0\0\0\0", 4);
此構造函數告訴字符串使用char *的前4個字符,而不將任何\ 0字符解釋爲null。
但是,當他試圖在任何其他地方使用它作爲普通字符串時會發生什麼?我真的認爲有一種更好(更安全)的方式來實現OP所需要的;如果他只會告訴我們那是什麼。 – Infiltrator 2011-05-23 23:48:05
那麼,如果他試圖使用任何嵌入null的字符數組 - 而不僅僅是字符串 - 他會遇到問題,如果他沒有考慮到空值在那裏。但是如果他記住空位,他會沒事的。如果他想轉換回char *,他可以使用不截斷和null終止的string :: data()。他可以使用string :: iterator來掃描等。 – jwismar 2011-05-24 01:06:42
你正確地做到了。您只需要避免將解釋爲空作爲結尾字符。
但是你怎麼知道它在哪裏結束?我不知道;您可以將其長度存儲在某處。
你可以有一個「正常」字符串嵌入空值,但在第一個null任何函數,期望一個空終止的字符串將停止處理它;因此,你需要使用計數的字符串。
C++ std::string
是一種計數字符串,您可以使用它來攜帶這些字符串。請記住,使用它時不應將其轉換回C字符串(即不要使用c_str()
方法),否則您將回到原點。
但是,要有更具體的建議,你應該更好地解釋你想要達到什麼。
Grammar nit:「C++'std :: string'是一種......」不是「C++ ......」 – zwol 2011-05-23 23:06:47
@Zack:我不是英語爲母語的人,我經常會錯過這些語法位。無論如何,固定,謝謝:) – 2011-05-23 23:08:41
在C++中,std::string
類將在包含NUL字符的情況下工作。
但是:
c_str()
功能將失敗。const char*
的構造函數將失敗。您可能會更好地使用std::vector<char>
服務。
如果你想有一個的std :: string,你可以得到任何大小你想要
std::string s(10, '\0');
爲您提供了10個NULL字符的字符串。
我想你需要詳細闡述一下你想用它來做什麼,然後我們才能夠幫助你。 – Infiltrator 2011-05-23 23:05:04
0不是一個有效的顯示字符,如你所知,表示字符串的結尾,那麼它怎麼會有一個大於0的長度?聽起來像你有一個一般的設計問題。 – 2011-05-23 23:05:21