复制整数数组的最佳方法是什么?我知道memcpy()
是一种方法。有没有像strdup()
这样的函数?
答案 0 :(得分:26)
没有,strdup
也不在标准中。你当然可以写自己的:
int * intdup(int const * src, size_t len)
{
int * p = malloc(len * sizeof(int));
memcpy(p, src, len * sizeof(int));
return p;
}
答案 1 :(得分:1)
如果使用得当,这可能会有效:
#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()
,以及任何类型。