c - 将 void* 复制到数组中的某个位置,C
问题描述
我有这个结构:
typedef struct {
int size;
int capacity;
int element_size;
void* data;
} array;
而且我有一个函数可以将一个 void ptr 附加到数据中。正如您所看到的,大小每次都会增加,因此数据不会被覆盖。我正在尝试根据数组的当前大小将 data_ptr 复制到数据数组中。但是这个值是不可赋值的。我已经使用 memcpy 进行了这项工作,但我只想复制指针而不是它指向的内容。有小费吗?
array alloc_array(int capacity, int element_size) {
void* data_alloc = malloc(capacity * element_size);
return (array) {.size = 0, .capacity = capacity, .element_size = element_size, .data = data_alloc};
}
void append(array* arr, void* data_ptr) {
arr->data + (arr->size * arr->element_size) = data_ptr;
arr->size++;
}
解决方案
我假设您要附加一个由data_ptr
. 不是data_ptr
指针本身。
只需使用重新分配。
void append(array* arr, void* data_ptr) {
if (arr->size + 1 > arr->capacity) {
size_t new_capacity = arr->capacity + 1; // consider 1+2*arr->capacity
void *new_data = realloc(arr->data, new_capacity * arr->element_size);
if (!new_data)
.. error handling ...
// update resized arr
arr->capacity = new_capacity;
arr->data = new_data;
}
// find pointer to a new element at the end of new_data
char *dst = (char*)arr->data + data->size * arr->element_size;
// copy new element there
memcpy(dst, data_ptr, arr->element_size);
arr->size++;
}
如果你想添加指针本身,只需将上面的函数包装在帮助器中:
void append_ptr(array* arr, void* ptr) {
append(arr, &ptr);
}
请确保arr->element_size == sizeof (void*)
推荐阅读
- django - 如何从 django 中的多个表中获取数据
- rust - Actix TCP 客户端实现的编译问题
- sql - 进行 1 对 1 多字段 SQL 联接,其中只有一些值匹配
- c# - ASP.NET,Entity Framework Code First 多对多自引用列表
- python - 如何使用 Python 从统计跟踪网站 (cod.tracker.gg) 抓取正确的元素
- java - android.widget.ProgressBar 不能转换为 android.widget.RelativeLayout
- javascript - Chrome 网上应用店:扩展被拒绝
- android - 无法让 packageManagers 或 Context 传递给在 main 中运行良好的函数的类。科特林
- c# - 如何解析此 C# 行中的双引号?
- javascript - 在 react-native 中显示当前周