arrays - 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
解决方案
的第三个参数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));
推荐阅读
- google-cloud-platform - Bigquery DML 操作
- swift - 教程类型“NSNotification.Name”没有成员“UIResponder”中的 Swift 5 不起作用
- java - 使用 Java 将具有时区偏移的日期和时间转换为时间戳
- html - 如何在 CSS 中为 iframe 正确实现 margin-left?
- kubernetes - Kubernetes OIDC:没有有效的组映射
- python - Python:如何使用 __setitem__ 设置子类 int 的值
- asp.net-mvc-4 - 是否可以在 MVC 5 和 .Net core MVC 3.1 应用程序之间共享 .ASPXAUTH cookie
- reactjs - Gatsby.js 中的多个模板
- node.js - 在axios请求NodeJS中传递key和value
- angular - Angular Laravel Pusher 419 unknown status when trying to auth user