在C中使用char数组深度复制结构(如何复制数组?)

时间:2015-05-01 15:10:14

标签: c struct deep-copy

我的C程序中有以下结构

struct person {
    char key[50];
    char color[20];
    int age;
};

我想制作一个这个结构的深层副本。我有深度复制功能设置但是我对如何深度复制字符串有点困惑。我听说有人使用strcpy和其他人使用strdup

我想要的程序是,如果原始人被释放,深层复制人的钥匙和颜色不会受到影响。设置后,键和颜色不能改变。出于我的目的,我应该使用strcpy还是strdup函数?

2 个答案:

答案 0 :(得分:5)

要执行包含数组(没有任何指针)的结构的深层副本,深层副本很简单

String dateString = "29/04/2015";
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
Date date = dateFormat.parse(dateString);
SimpleDateFormat formatter = new SimpleDateFormat("E", Locale.no_NO);
String day = formatter.format(date);

如果“字符串”是指针,则这不起作用。然后有必要分配新的字符串,然后使用strcpy()之类的函数来复制成员。

day

上面遗漏了一些错误检查(例如,在复制之前需要检查struct person x = {"Key", "Color", 42}; /* initialise to something */ struct person y = x; 是否成功)。

答案 1 :(得分:0)

如果你使用strcpy(),你必须自己分配内存。 strdup()会为您做到这一点。您可以使用其中一个创建与原始内存块分开的新内存块,但自然strdup()更简单,因为它不需要单独的malloc(strlen())调用。