Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:将数组中的所有元素添加到另一个数组中_C_Arrays - Fatal编程技术网

C:将数组中的所有元素添加到另一个数组中

C:将数组中的所有元素添加到另一个数组中,c,arrays,C,Arrays,在C语言中,有没有一种方法可以将一个数组的所有元素复制到另一个数组中,而无需解析要复制的数组的所有元素?我可以用指针吗?因为我知道一个函数可以自动获取数组中一定数量的元素,只要说出第一个元素的索引,所以可能(?)我可以做类似的事情 例如,如果我有两个数组: int array[10]; int tocopy[3]; 我会说: array[0] = tocopy 它还会自动填充数组[1]和数组[2] 这是可能的吗?您可以使用memmove(),或者,如果数组不重叠,memcpy(): 例如:

在C语言中,有没有一种方法可以将一个数组的所有元素复制到另一个数组中,而无需解析要复制的数组的所有元素?我可以用指针吗?因为我知道一个函数可以自动获取数组中一定数量的元素,只要说出第一个元素的索引,所以可能(?)我可以做类似的事情

例如,如果我有两个数组:

int array[10];
int tocopy[3];
我会说:

array[0] = tocopy
它还会自动填充数组[1]和数组[2]


这是可能的吗?

您可以使用
memmove()
,或者,如果数组不重叠,
memcpy()

例如:

memmove(array, tocopy, sizeof(tocopy);
就像做:

array[0] = tocopy[0];
array[1] = tocopy[1];
array[2] = tocopy[2];


正如注释中所建议的,在使用这些函数时,也要注意不要超过数组边界,即:在为数组分配的内存之外进行读取或写入。

您的最佳选择可能是
for
循环。您可以创建一个函数来“隐藏”详细信息

要将
的第二、第三和第四个元素复制到
数组的第六、第七和第八个元素(假设它们存在),可以调用如下函数

arrcopy(array, 5, tocopy, 1, 3); // array[5,6,7] = tocopy[1,2,3]

当然,始终确保不超过数组边界。

不,这是语法错误,其他元素不会自动填充。尝试
memcpy
memmove
在一条指令中复制多个元素。但是你必须非常小心不要超过数组的界限:C不能保护你自己。只是在使用这些函数时要小心,因为它们可能成为黑客攻击的载体。
void arrcopy(int *restrict dst, int dstindex, const int *restrict src, int srcindex, int len) {
    for (int k = 0; k < len; k++) {
        dst[dstindex + k] = src[srcindex + k];
    }
}
arrcopy(array, 0, tocopy, 0, 3); // array[0,1,2] = tocopy[0,1,2]
arrcopy(array, 5, tocopy, 1, 3); // array[5,6,7] = tocopy[1,2,3]