c ++中strcpy的替代方案

时间:2011-01-20 19:14:35

标签: c++ deep-copy strcpy

在C中,我使用strcpy制作字符串的深层副本,但使用strcpy仍然'很好' C ++还是有更好的替代品,我应该使用?

4 个答案:

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