У меня есть простая структура:
typedef struct {
void *things;
int sizeOfThings;
} Demo;
Things предназначен для хранения массива отдельных «вещей», таких как, возможно, строки или целые числа. Я создаю указатель на него:
Demo * Create(int value) {
Demo *d = malloc(sizeof(Demo));
if (d != NULL) {
d->sizeOfThings = value;
d->things = malloc(20 * value); // We'll have a max of 20 things
}
}
Например, value
- это sizeof(int) для массива целых чисел.
Если в другой функции я хочу что-то вставить в d->things (предполагая, по крайней мере, что я просто добавляю это в первый слот, управление позициями выполняется в другом месте):
char * thing = "Me!";
strncpy(d->things[0], &thing, d->sizeOfThings);
Я обхожу область strncpy
test.c:10: warning: pointer of type ‘void *’ used in arithmetic
test.c:10: warning: dereferencing ‘void *’ pointer
test.c:10: error: invalid use of void expression
Я просто пытаюсь понять использование void* как способ обобщить мои функции. Я подозреваю, что что-то не так с d->things[0]
.