对于常规的 C 字符串,空字符 '\0'
表示数据结束。
std::string
怎么样,我可以有一个嵌入空字符的字符串吗?
最佳答案
是的,您可以在 std::string
中嵌入空值。
例子:
std::string s;
s.push_back('\0');
s.push_back('a');
assert(s.length() == 2);
注意:std::string
的 c_str()
成员将始终向返回的 char 缓冲区附加一个空字符;但是,std::string
的 data()
成员可能会也可能不会将空字符附加到返回的 char 缓冲区。
小心运算符+=
要注意的一件事是不要在 RHS 上将 operator+=
与 char*
一起使用。它只会累加到空字符。
例如:
std::string s = "hello";
s += "\0world";
assert(s.length() == 5);
正确的做法:
std::string s = "hello";
s += std::string("\0world", 6);
assert(s.length() == 11);
存储二进制数据更常用std::vector
通常更常见的是使用std::vector
来存储任意二进制数据。
std::vector<char> buf;
buf.resize(1024);
char *p = &buf.front();
这可能更常见,因为 std::string
的 data()
和 c_str()
成员返回 const 指针,因此内存不可修改。使用 &buf.front() 您可以直接修改缓冲区的内容。
关于c++ - std::string 可以包含嵌入的空值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44095669/