Wil*_*mKF 37 c++ c-strings stdstring null-terminated
对于常规C字符串,空字符'\0'
表示数据的结尾.
那么std::string
,我可以使用嵌入空字符的字符串吗?
Bri*_*ndy 40
是的,你可以嵌入空值std::string
.
例:
std::string s;
s.push_back('\0');
s.push_back('a');
assert(s.length() == 2);
Run Code Online (Sandbox Code Playgroud)
注意:std::string
的c_str()
成员将始终在返回的char缓冲区中附加一个空字符; 然而,std::string
的data()
部件可以或可以不追加一个空字符到返回的字符缓冲区.
注意操作符+ =
有一件事看出来的是不使用operator+=
与char*
在RHS.它只会在空字符之前加起来.
例如:
std::string s = "hello";
s += "\0world";
assert(s.length() == 5);
Run Code Online (Sandbox Code Playgroud)
正确的方法:
std::string s = "hello";
s += std::string("\0world", 6);
assert(s.length() == 11);
Run Code Online (Sandbox Code Playgroud)
存储二进制数据更常用于使用std :: vector
通常,std::vector
用于存储任意二进制数据更常见.
std::vector<char> buf;
buf.resize(1024);
char *p = &buf.front();
Run Code Online (Sandbox Code Playgroud)
因为这可能是更常见std::string
的data()
和c_str()
成员返回常量指针,所以内存是不可修改的.使用&buf.front(),您可以直接修改缓冲区的内容.
归档时间: |
|
查看次数: |
17054 次 |
最近记录: |