如何将一个整数数组复制到另一个
复制整数数组的最佳方法是什么? 我知道memcpy()
是一种方法。 有没有像strdup()
这样的函数?
没有, strdup
也不在标准中。 你当然可以写自己的:
int * intdup(int const * src, size_t len) { int * p = malloc(len * sizeof(int)); memcpy(p, src, len * sizeof(int)); return p; }
如果使用得当,这可能有效:
#define arrayDup(DST,SRC,LEN) \ { size_t TMPSZ = sizeof(*(SRC)) * (LEN); \ if ( ((DST) = malloc(TMPSZ)) != NULL ) \ memcpy((DST), (SRC), TMPSZ); }
然后你可以这样做:
double dsrc[4] = { 1.1, 2.2, 3.3, 4.4 }; int *isrc = malloc(3*sizeof(int)); char *cdest; int *idest; double *ddest; isrc[0] = 2; isrc[1] = 4; isrc[2] = 6; arrayDup(cdest,"Hello",6); /* duplicate a string literal */ arrayDup(idest,isrc,3); /* duplicate a malloc'ed array */ arrayDup(ddest,dsrc,4); /* duplicate a regular array */
警告是:
-
SRC
和DST
宏参数不止一次被评估 - 作为
SRC
传递的指针/数组的类型必须与源数组的类型相匹配(除非转换为正确的类型,否则无void *
)
另一方面,它适用于源数组是否为malloc()
ed,以及任何类型。