我不想在下面的代码中用字符串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);
答案 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);
显然,这会执行可能不是最佳的复制。您可能想考虑尝试移动它。