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

复制整数数组的最佳方法是什么? 我知道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 */ 

警告是:

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

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