现代的方法是什么?不赞成使用<cstring>
这样的 header ,并且某些编码样式禁止使用“类似于C的”函数。我有三种做同一件事的方法。哪一种最适合现代C++?
1. 使用迭代器并包含空终止符
{
std::string test{"hello, world!"};
char* output = new char[test.size() + 1];
std::copy(test.begin(), test.end(),
output);
output[test.size() + 1] = '\0';
std::cout << output;
delete output;
}
2. 使用包含空终止符的
c_str()
{
std::string test{"hello, world!"};
char* output = new char[test.size() + 1];
std::copy(test.c_str(), test.c_str() + std::strlen(test.c_str()),
output);
std::cout << output;
delete output;
}
3. 使用
std::strcpy
{
std::string test{"hello, world!"};
char* output = new char[test.size() + 1];
std::strcpy(output, test.c_str());
std::cout << output;
delete output;
}
我不想对访问员说“哦,如果您使用strcpy,您必须是C程序员”看起来像个菜鸟。
最佳答案
获取连续缓冲区的C++ 17之前的现代安全方法是std::vector
。
std::string test{"hello, world!"};
std::vector<char> output(test.c_str(), test.c_str()+test.size()+1);
// use output.data() here...
从C++ 17开始,
std::string
具有非常量data()
重载。std::string test{"hello, world!"};
char * p = test.data();