-1

这段代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
int arr[3][3] = {
                    1,2,3,
                    4,5,6,
                    7,8,9
                };


int *arry = (int*)malloc(3 * sizeof(int));
*arry = memcpy(arry, arr[1], 3 *sizeof(int));

 int t;
 for(t = 0 ; t < 3 ; t++)
    {
        printf("\n");
        printf("%d \t", arry[t]);
    }
}

正在产生此输出:

7280624
5
6
进程返回 3 (0x3) 执行时间:0.011 s
按任意键继续。

为什么它没有正确复制第一个值?

4

2 回答 2

3

它正在正确复制第一个值,但是

*arry = memcpy(arry, arr[1], 3 *sizeof(int));

您正在用 . 的返回值覆盖它memcpy

打电话

memcpy(arry, arr[1], 3 *sizeof(int));

如果您想检查它,或者将返回值分配给不同的变量(毫无意义,因为memcpy返回它的第一个参数)。

于 2013-04-04T14:47:01.593 回答
0

memcpy返回一个 void*。

您正在将 memcpy 返回的 void* 分配给 arry 指向的值。在尝试读取该值时,这会给您一个奇怪的值。只需调用 memcpy

memcpy(arry, arr[1], 3 * sizeof(int));
于 2013-04-04T14:52:22.587 回答