使用c ++

时间:2015-10-15 15:45:17

标签: c++ buffer

我不想在下面的代码中用字符串str初始化一个静态字符串缓冲区,但是我收到以下错误:

  

错误:无法在初始化

中将'std :: string'转换为>'char'

如果我使用

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

2 个答案:

答案 0 :(得分:3)

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

因此,您需要先创建数组,然后手动将std::string的内容分配给它。遗憾的是,数组不可分配,因此您将不得不使用&#34;算法&#34;这样做。

我们走了:

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,如果它的功能 - static,此代码可能没有预期的效果。

答案 1 :(得分:0)

您可以使用 std::string::copy()

std::string text = "Hello there!";
char* cStrText = new char[text.length()];

//Copy the string into the buffer
text.copy(cStrText, text.length(), 0);

显然,这会执行可能不是最佳的复制。您可能想考虑尝试移动它。

https://www.cplusplus.com/reference/string/string/copy/