如何在int *类型上使用strcpy和memcpy

时间:2018-01-07 18:33:48

标签: c arrays

我想 追加 这两个数组

    int array[3]={10,20,5};
    int newArray[3]={1,2,3};

像这样的一个数组

    array[]={10,20,5,1,2,3};

但是当我使用strcpy

    strcpy(array,newArray);

    for(i=0;i<strlen(array);i++)
    {
          printf("%d\t",array[i]);
    }

结果如下所示

   1     20     5     0      0     0

当我尝试使用memcpy时,结果仍然相同。 我如何附加其中两个数组?

2 个答案:

答案 0 :(得分:6)

strcpy 在这里工作没有成功,因为你没有将空终止的char数组传递给它。它期望char*。您可以使用memcpy来解决问题。例如:(插图)

int a[6]={1,2,3};
int b[3]={4,5,6};
memcpy(a+3, b, 3*sizeof(int));
for(size_t  i = 0; i < sizeof(a)/sizeof(a[0]); i++){
    printf("%d\n",a[i] );
}

这是从3开始,将int b从数组a复制到数组3

另请注意,您使用的是sizeof错误的方法。应用于数组的sizeof会返回整个数组的大小 - 但是您不希望这样,而是需要多个元素。您可以通过将整个数组大小除以单个元素的大小来获得。

在您的情况下,array3个元素 - 因此您无法将额外的3元素复制到其中。要将元素复制到它,请确保数组的大小足以容纳它们。

如果要复制,还应记住,您必须跟踪正确填充并已使用的位置数。否则,您可能会忘记应该进一步复制元素的位置。

答案 1 :(得分:0)

首先,strcpy仅适用于char*,并且这些char数组需要以空终止。

其次,您需要一种方法来判断您拥有多少元素。 sizeof在你的情况下不会有帮助。这里有一个问题,因为你声明array长度为10,但你只使用了3个元素;你怎么跟踪你只使用数组的一部分的事实?

要附加两个数组,您有两个选择:

  • 就地执行(即修改其中一个数组)。您需要创建额外的空间。
  • 创建一个新数组来保存输出。这是最通用的解决方案。

我建议你考虑一下执行该操作的函数原型应该如何

例如,您可以

size_t concatenate(int *a, size_t na, int *b, size_t nb, int **c);

a,b是你的阵列; na,nb它们在元素中的大小,c和输出参数将保存结果数组(在某些时候你必须free())。返回值是结果数组的大小(na + nb)。

concatenate cuold的实现

size_t concatenate(int *a, size_t na, int *b, size_t nb, int **c)
{
     *c = malloc(sizeof(**c)*(na + nb));
     if (c == NULL)
         return 0;

     memcpy(*c, a, sizeof(**c)*na);
     memcpy(*c + na, b, sizeof(**c)*nb);

     return na+nb;
 }