我想 追加 这两个数组
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
时,结果仍然相同。
我如何附加其中两个数组?
答案 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
会返回整个数组的大小 - 但是您不希望这样,而是需要多个元素。您可以通过将整个数组大小除以单个元素的大小来获得。
在您的情况下,array
有3
个元素 - 因此您无法将额外的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;
}