【发布时间】:2020-12-22 17:26:26
【问题描述】:
我非常感谢一些解释,为什么我滥用 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
【问题讨论】:
-
这类问题可以在几秒钟内轻松解决,方法是在使用之前实际研究一个函数的工作原理,而不是通过“抓住机会”然后反复试验来编程。跨度>
-
您是正确的,因为您已将
memcpy的用法确定为罪魁祸首。必须是memcpy(ptr, array, 5*sizeof(int));//复制array的所有20个字节,而不仅仅是5个。 -
如果代码需要复制
array,简化分配到array的大小:int *ptr = malloc(sizeof array);
标签: arrays c dynamic malloc memcpy