有没有办法在里面拥有和处理空值std::basic_string?
有时传递的字符串序列具有空值.例如,下面的代码输出1234,5678而不是整个字符串.
#include <iostream>
#include <string>
#include <cstring>
int main ()
{
int length;
std::string str = "1234,5678\000,ABCD,EFG#";
std::cout << "length"<<str.c_str();
}
Run Code Online (Sandbox Code Playgroud)
我需要得到完整的字符串.
首先,你必须告诉字符串构造函数的大小; 它只能在输入为空终止时确定大小.像这样的东西会起作用:
std::string str("1234,5678\000,ABCD,EFG#", sizeof("1234,5678\000,ABCD,EFG#")-1);
Run Code Online (Sandbox Code Playgroud)
没有特别好的方法来避免重复; 你可以声明一个本地数组
char c_str[] = "1234,5678\000,ABCD,EFG#"; // In C++11, perhaps 'auto const & c_str = "...";'
std::string str(c_str, sizeof(c_str)-1);
Run Code Online (Sandbox Code Playgroud)
可能有运行时成本; 或者你可以使用宏; 或者你可以将字符串构建成碎片
std::string str = "1234,5678";
str += '\0';
str += ",ABCD,EFG#";
Run Code Online (Sandbox Code Playgroud)
最后,流式传输字符串本身(其大小已知)而不是提取c字符串指针(其大小将通过查找空终止符来确定):
std::cout << "length" << str;
Run Code Online (Sandbox Code Playgroud)
更新:正如评论中所指出的,C++ 14为basic_string文字添加了一个后缀:
std::string str = "1234,5678\000,ABCD,EFG#"s;
^
Run Code Online (Sandbox Code Playgroud)
通过我阅读标准草案,即使存在嵌入的空字符,它也应该起作用.