2011-11-27 152 views
15

复制整数数组的最佳方法是什么?我知道memcpy()是一种方法。有没有像strdup()这样的功能?如何将一个整数数组复制到另一个整数数组

+0

一个简单的'for'循环? – Shahbaz

+1

'strdup'依赖于一个null结束符,它是int数组不具有的。 'memcpy'有什么问题? –

+0

雅会做。我想知道是否可以像使用strdup()的字符串一样执行此操作。 – FourOfAKind

回答

23

没有,并且strdup也不在标准中。你当然可以只写自己:

int * intdup(int const * src, size_t len) 
{ 
    int * p = malloc(len * sizeof(int)); 
    memcpy(p, src, len * sizeof(int)); 
    return p; 
} 
+5

我会检查malloc是否返回NULL;) – Beginner

+9

@罗曼B .:为读者锻炼! :-) –

+0

当然,我会做的。 :) – FourOfAKind

0

这可能是工作,如果使用得当:

#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 */ 

的告诫是:

  • SRCDST个宏参数进行评估多于一次
  • 指针/阵列的作为SRC传递的类型必须与源阵列的(无void *除非转换为正确的类型)

在另一方面,它作品源数组是否为malloc() ed或不是,以及任何类型。

相关问题