如何将一个整数数组复制到另一个整数数组
答
没有,并且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或不是,以及任何类型。
一个简单的'for'循环? – Shahbaz
'strdup'依赖于一个null结束符,它是int数组不具有的。 'memcpy'有什么问题? –
雅会做。我想知道是否可以像使用strdup()的字符串一样执行此操作。 – FourOfAKind