memcpy()从较小的数组到较大的数组

La *_*bla 1 c arrays memcpy

我找不到任何关于这个问题的提法.我有一个结构数组,我需要调整大小的数组.两个结构都已完全初始化(每个单元格的值都不是NULL)

typedef struct Square {
...
...
}Square;

Square s1[1024];
Square s2[2048];
Run Code Online (Sandbox Code Playgroud)

如果我使用memcpy()s1 复制到s2中,s2会怎么样?我知道它复制字节数据.将前1024个单元格与s1相同,剩余的1024个单元格是否与初始化单元格相同?还是会影响他们?

谢谢

PS这里的数组是静态分配的,但我写的只是为了方便.我让他们分配使用malloc()

Jam*_*lin 7

如果你这样做:

memcpy(s2, s1, sizeof(s1));
Run Code Online (Sandbox Code Playgroud)

将从中复制第一个1024 Square秒,其余部分将不受影响(因此,如果它们未初始化,它们仍将是未初始化的).s2s1

请记住,如果按照您的说法分配堆,则无法使用sizeof.如果你想要做的只是增长数组,你可能会发现realloc很有用.

  • @JamesMcLaughlin:指针数组可用于模拟2D数组,但2D数组​​不是指针数组; 它只是一个数组数组. (2认同)
  • @JamesMcLaughlin:不,C二维数组是一个数组数组.见最新[C标准草案]的第6.5.2.1段第3段(http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf),以及[http: //www.c-faq.com/](comp.lang.c常见问题).有一个常见的误解,即数组和指针是一回事; 他们真的不是.(正如我所说,指针数组可用于模拟像2D数组一样的数据结构.) (2认同)