gpt4 book ai didi

c++ - 如何在 C++ 中的 basic_string 中有空值

转载 作者:搜寻专家 更新时间:2023-10-30 23:56:48 25 4
gpt4 key购买 nike

有没有办法在 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();
}

我需要得到完整的字符串。

最佳答案

首先,您必须将大小告诉字符串构造函数;如果输入以 null 结尾,它只能确定大小。这样的事情会起作用:

std::string str("1234,5678\000,ABCD,EFG#", sizeof("1234,5678\000,ABCD,EFG#")-1);

没有特别好的方法来避免重复;你可以声明一个本地数组

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);

这可能会产生运行时成本;或者你可以使用宏;或者你可以分段构建字符串

std::string str = "1234,5678";
str += '\0';
str += ",ABCD,EFG#";

最后,流式传输字符串本身(其大小已知)而不是提取 C 字符串指针(其大小将通过查找空终止符来确定):

std::cout << "length" << str;

更新:正如评论中所指出的,C++14 为 basic_string 文字添加了一个后缀:

std::string str = "1234,5678\000,ABCD,EFG#"s;
^

根据我对标准草案的阅读,即使有嵌入的空字符也应该可以工作。

关于c++ - 如何在 C++ 中的 basic_string 中有空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27017046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com