2011-05-23 103 views
2

由於\ x00也是終止字符,我將如何得到一個帶有空字符\ x00的字符串?如何將終止NUL字符 x00轉換爲字符串?

我確實需要它作爲我的程序的一部分。

我需要的字符串是「\ x00 \ x00 \ x00 \ x00」。有一些特殊的語法嗎?它是什麼?

+2

我想你需要詳細闡述一下你想用它來做什麼,然後我們才能夠幫助你。 – Infiltrator 2011-05-23 23:05:04

+0

0不是一個有效的顯示字符,如你所知,表示字符串的結尾,那麼它怎麼會有一個大於0的長度?聽起來像你有一個一般的設計問題。 – 2011-05-23 23:05:21

回答

2
std::string str("\0\0\0\0", 4); 

此構造函數告訴字符串使用char *的前4個字符,而不將任何\ 0字符解釋爲null。

+0

但是,當他試圖在任何其他地方使用它作爲普通字符串時會發生什麼?我真的認爲有一種更好(更安全)的方式來實現OP所需要的;如果他只會告訴我們那是什麼。 – Infiltrator 2011-05-23 23:48:05

+0

那麼,如果他試圖使用任何嵌入null的字符數組 - 而不僅僅是字符串 - 他會遇到問題,如果他沒有考慮到空值在那裏。但是如果他記住空位,他會沒事的。如果他想轉換回char *,他可以使用不截斷和null終止的string :: data()。他可以使用string :: iterator來掃描等。 – jwismar 2011-05-24 01:06:42

2

你正確地做到了。您只需要避免將解釋爲空作爲結尾字符。

但是你怎麼知道它在哪裏結束?我不知道;您可以將其長度存儲在某處。

2

可以有一個「正常」字符串嵌入空值,但在第一個null任何函數,期望一個空終止的字符串將停止處理它;因此,你需要使用計數的字符串。

C++ std::string是一種計數字符串,您可以使用它來攜帶這些字符串。請記住,使用它時不應將其轉換回C字符串(即不要使用c_str()方法),否則您將回到原點。

但是,要有更具體的建議,你應該更好地解釋你想要達到什麼。

+0

Grammar nit:「C++'std :: string'是一種......」不是「C++ ......」 – zwol 2011-05-23 23:06:47

+0

@Zack:我不是英語爲母語的人,我經常會錯過這些語法位。無論如何,固定,謝謝:) – 2011-05-23 23:08:41

8

在C++中,std::string類將在包含NUL字符的情況下工作。

但是:

  • c_str()功能將失敗。
  • 讀取const char*的構造函數將失敗。

您可能會更好地使用std::vector<char>服務。

2

如果你想有一個的std :: string,你可以得到任何大小你想要

std::string s(10, '\0'); 

爲您提供了10個NULL字符的字符串。