在 C 中,我曾经strcpy
制作字符串的深层副本,但在 C++中使用它仍然“很好”strcpy
还是有更好的替代品我应该使用?
问问题
33755 次
4 回答
20
我把它放在上面的评论中,但只是为了使代码可读:
std::string a = "Hello.";
std::string b;
b = a.c_str(); // makes an actual copy of the string
b = a; // makes a copy of the pointer and increments the reference count
因此,如果您真的想模仿 的行为,则需要使用;strcpy
来复制它。c_str()
更新
应该注意的是,C++11 标准明确禁止了std::string
以前许多实现中使用的常见写时复制模式。因此,不再允许引用计数字符串,以下将创建一个副本:
std::string a = "Hello.";
std::string b;
b = a; // C++11 forces this to be a copy as well
于 2011-01-20T19:31:29.987 回答
17
在 C++ 中,最简单的方法通常是使用 std::string 类而不是 char*。
#include <string>
...
std::string a = "Hello.";
std::string b;
b = a;
行“b = a;” 和 strcpy 做的事情是一样的。
于 2011-01-20T19:17:18.083 回答
6
如果您使用的是 c++ 字符串,只需使用复制构造函数:
std::string string_copy(original_string);
of 赋值运算符
string_copy = original_string
如果您必须使用 c 风格的字符串(即以 null 结尾的字符数组),那么是的,只需使用 strcpy,或者作为更安全的替代方案 strncpy。
于 2011-01-20T19:20:07.943 回答
3
建议您使用 strcpy_s ,因为除了目标和源参数之外,它还有一个用于目标缓冲区大小的附加参数以避免溢出。但是,如果您使用 char 数组/指针,这仍然可能是复制字符串的最快方法。
例子:
char *srcString = "abcd";
char destString[256];
strcpy_s(destString, 256, srcString);
于 2011-01-20T19:21:58.907 回答