在C中,我使用strcpy
制作字符串的深层副本,但使用strcpy
仍然'很好' C ++还是有更好的替代品,我应该使用?
答案 0 :(得分:17)
我把它放在上面的评论中,但只是为了使代码可读:
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
答案 1 :(得分:15)
在C ++中,最简单的方法通常是使用std :: string类而不是char *。
#include <string>
...
std::string a = "Hello.";
std::string b;
b = a;
“b = a;”这一行你通常会用strcpy做同样的事情。
答案 2 :(得分:4)
如果您正在使用c ++字符串,只需使用复制构造函数:
std::string string_copy(original_string);
赋值运算符
string_copy = original_string
如果你必须使用c风格的字符串(即以null结尾的字符数组),那么,只需使用strcpy,或者作为更安全的替代品,strncpy。
答案 3 :(得分:2)
建议您使用strcpy_s,因为除了destination和source参数之外,还有一个额外的参数用于目标缓冲区的大小以避免溢出。但是,如果使用字符串数组/指针,这仍然是复制字符串的最快方法。
示例:
char *srcString = "abcd";
char destString[256];
strcpy_s(destString, 256, srcString);