2011-05-23 63 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字符的字符串。