首页 > 解决方案 > C动态数组不正确的数字

问题描述

我非常感谢一些解释,为什么我滥用 memcpy 即为什么以下代码的输出不正确:

int main()
{
    int array[5] = {1, 2, 3, 4, 5};
       
    int *ptr = malloc(sizeof(int) * 5);
    
    memcpy(ptr, array, 5);
    
    printf("%d\n", ptr[0] );
    printf("%d\n", ptr[1] );
    printf("%d\n", ptr[2] );
    printf("%d\n", ptr[3] );
    printf("%d\n", ptr[4] );
    
    free(ptr);
    
    return 0;
}

输出是:1 2 0 0 0

标签: arrayscdynamicmallocmemcpy

解决方案


的第三个参数memcpy()是要复制的字节数,而不是元素数。

在这种情况下,

memcpy(ptr, array, 5);

应该

memcpy(ptr, array, sizeof(int) * 5);

或者

memcpy(ptr, array, sizeof(*ptr) * 5);

或者

/* copy the whole array, no *5 in this case */
memcpy(ptr, array, sizeof(array));

推荐阅读