gpt4 book ai didi

c++ - 你如何构造一个带有嵌入 null 的 std::string?

转载 作者:IT老高 更新时间:2023-10-28 12:02:30 24 4
gpt4 key购买 nike

如果我想构造一个带有如下行的 std::string:

std::string my_string("a\0b");

我想在结果字符串中包含三个字符(a、null、b),我只得到一个。正确的语法是什么?

最佳答案

C++14 起

我们已经能够创建 literal std::string

#include <iostream>
#include <string>

int main()
{
using namespace std::string_literals;

std::string s = "pl-\0-op"s; // <- Notice the "s" at the end
// This is a std::string literal not
// a C-String literal.
std::cout << s << "\n";
}

C++14 之前

问题是 std::string采用 const char* 的构造函数假设输入是一个 C 字符串。 C 字符串是 \0终止,因此解析在到达 \0 时停止字符。

为了弥补这一点,您需要使用从 char 数组(而不是 C 字符串)构建字符串的构造函数。这需要两个参数 - 一个指向数组的指针和一个长度:

std::string   x("pq\0rs");   // Two characters because input assumed to be C-String
std::string x("pq\0rs",5); // 5 Characters as the input is now a char array with 5 characters.

注意:C++ std::string 不是 \0 -终止(如其他帖子中所建议)。但是,您可以使用 c_str() 方法提取指向包含 C 字符串的内部缓冲区的指针。 .

还可以查看 Doug T's answer下面关于使用 vector<char> .

还可以查看 RiaD对于 C++14 解决方案。

关于c++ - 你如何构造一个带有嵌入 null 的 std::string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/164168/

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