我的C程序中有以下结构
struct person {
char key[50];
char color[20];
int age;
};
我想制作一个这个结构的深层副本。我有深度复制功能设置但是我对如何深度复制字符串有点困惑。我听说有人使用strcpy
和其他人使用strdup
。
我想要的程序是,如果原始人被释放,深层复制人的钥匙和颜色不会受到影响。设置后,键和颜色不能改变。出于我的目的,我应该使用strcpy
还是strdup
函数?
答案 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())
调用。