如何使用C中的memcpy()将arrray复制到数组

Ras*_*yak 3 c

我正在尝试(temp)从另一个数组复制一个数组a.但我发现它并没有发生.

Fig-1

int main()
{
    typedef int arr_1[3];
    arr_1 arr[4];
    arr_1 *temp;
    arr_1 a[3] = {1, 2, 3};
    memset(&temp, 0, sizeof(temp));
    memcpy(temp, a, sizeof(temp));
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用如下的简单程序时,

Fig-2

 main()
    {
    int abc[3], def[3];
    def[3] = {1, 2, 3};
    memcpy(abc, def, sizeof(abc));
    }
Run Code Online (Sandbox Code Playgroud)

以上代码(fig-2)对我来说非常好.但是fig-1不适合我.两者都是相同的.但为什么fig-1不工作?

Jon*_*Jon 9

因为temp它不是数组,所以它是一个指针,因此sizeof(temp)与数组完全无关.

您想要更改memcpy要使用sizeof(a).您还需要temp在复制之前给出一个合理的值,否则程序会有未定义的行为.


Joh*_*nic 5

例如,您必须为tempwith分配内存malloc()。现在它只是一个未初始化的指针。