我有一个需要对字符串进行编码的函数,它需要能够接受 0x00 作为有效的“字节”。我的程序需要检查字符串的长度,但是如果我传入"\x00"
to std::string
the 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
是空干净的。人物 (\0
) 也可以自由地为零字节。所以,在这里,没有什么可以阻止我们正确读取数据结构。长度为b
将1
.
一般来说,您需要避免构造包含空字符的 C 字符串。如果您直接从文件中读取输入std::string
或者确保一次按下一个字符,您可以获得您想要的结果。如果您确实需要一个带有空字符的常量字符串,请考虑使用其他一些哨兵字符而不是\0
然后(如果你really需要它)将这些字符替换为'\0'
加载到后std::string
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)