如何将一个整数数组复制到另一个

时间:2011-11-27 16:37:37

标签: c memory-management

复制整数数组的最佳方法是什么?我知道memcpy()是一种方法。有没有像strdup()这样的函数?

2 个答案:

答案 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 */

警告是:

  • SRCDST宏参数不止一次评估
  • 作为SRC传递的指针/数组的类型必须与源数组的类型匹配(否void *除非转换为正确的类型)

另一方面,它适用于源数组是否为malloc(),以及任何类型。