如何在C语言中将数组的值赋值给另一个数组(进行复制)?

7

我希望能够复制一个二维数组并将其赋值给另一个变量。

在Python中,我会这样做:

grid = [['a','b','c'],['d','e','f'],['g','h','i']]
grid_copy = grid

我想在C语言中实现相同的功能。

char grid[3][3] = {{'a','b','c'},{'d','e','f'},{'g','h','i'}};

我该如何将这个数组复制到copy_grid中?


3
请注意,你的 Python 代码并没有复制数据。gridgrid_copy 都指向同一个列表。尝试更改其中一个元素,看看另一个会发生什么。 - NPE
3个回答

12

使用标准函数memcpy

char grid[3][3] = {{'a','b','c'},{'d','e','f'},{'g','h','i'}};
char grid_copy[3][3];

memcpy(grid_copy, grid, sizeof grid_copy);

我该如何赋值,例如 grid_copy[0][1] = grid[2][2]。我知道这样是错误的,但我想你知道我的意思。 - Nakib

11
使用 <string.h> 包含的 memcpy 函数。
#include <string.h>
void *memcpy(void *dest, const void *src, size_t n);

或者,您可以手动使用循环逐个放置每个值。

1
尽管答案是正确的,但需要注意如果数组在结构体内部,分配结构体将同时复制数组:
struct ArrStruct
{
    int arr[5][3];
};

int main(int argc, char argv[])
{
    struct ArrStruct as1 = 
    { { { 65, 77, 8 }, 
    { 23, -70, 764 }, 
    { 675, 517, 97 }, 
    { 9, 233, -244 }, 
    { 66, -32, 756 } } };

    struct ArrStruct as2 = as1;//as2.arr is initialized to the content of as1.arr

    return 0;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接