gpt4 book ai didi

c++ - 在 C++ 中用字符串初始化 char Buffer

转载 作者:行者123 更新时间:2023-11-28 00:11:00 25 4
gpt4 key购买 nike

我不想在下面的代码中使用字符串 str 初始化静态字符缓冲区,但出现以下错误:

error: cannot convert ‘std::string’ to >‘char’ in initialization

如果我使用

static char buf[500] = str.c_str();

我收到以下错误:

error: invalid conversion from ‘const char*’ to ‘char*’

下面是我的代码:

std::string str = "<Version="+version+" Ret=\"false\"/>";
static char buf[500] = str;
int len=strlen(buf);
buf[len]='\0';
INFO("Static Buffer :: "<<buf);

最佳答案

首先,您不能直接从std::string 初始化char[]。这是不可能的。即使可以,您也会写成 = str,而不是 = { str }

因此,您需要先创建数组,然后手动将 std::string 的内容分配给它。遗憾的是,数组不可赋值,因此您将不得不使用“算法”来完成它。

开始吧:

const std::string str = "Hello world";
static char buf[500] = {};
std::copy(
// from the start of the string
std::begin(str),

// to the end of the string, or to 499 chars in, whichever comes first
std::begin(str) + std::min(str.size(), sizeof(buf)),

// into buf
std::begin(buf)
);

恶心。

如果可以的话,很可能是这种情况,避免

如果您确实需要一个包含 std::string 内容的 C 字符串,只需在需要时访问 str.c_str()。一般而言,无需保留原始 char 数组,尤其是当您已经拥有适合该工作的正确工具时。

此外,由于您没有使用该数据初始化 buf,如果它是 function-static,则此代码可能没有预期的效果。

关于c++ - 在 C++ 中用字符串初始化 char Buffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33152924/

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