gpt4 book ai didi

c++ - std::string 停止在\0

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:48 27 4
gpt4 key购买 nike

我在使用 std::string 时遇到问题..

问题是 '\0' 被识别为字符串的结尾,就像在类 C 的字符串中一样。

例如下面的代码:

#include <iostream>
#include <string>

int main ()
{
std::string s ("String!\0 This is a string too!");
std::cout << s.length(); // same result as with s.size()
std::cout << std::endl << s;

return 0;
}

输出这个:

7
String!

这里有什么问题? std::string 不应该像对待任何其他字符一样对待 '\0' 吗?

最佳答案

想一想:如果给定const char*,您将如何确定哪里是真正的终止 0,哪里是嵌入的 0?

您需要明确传递字符串的大小,或者从两个迭代器(指针?)构造字符串

#include <string>
#include <iostream>


int main()
{
auto& str = "String!\0 This is a string too!";
std::string s(std::begin(str), std::end(str));
std::cout << s.size() << '\n' << s << '\n';
}

示例:http://coliru.stacked-crooked.com/a/d42211b7199d458d

编辑:@Rakete1111 让我想起了字符串文字:

using namespace std::literals::string_literals;
auto str = "String!\0 This is a string too!"s;

关于c++ - std::string 停止在\0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42874699/

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