LINUX.ORG.RU

История изменений

Исправление XMs, (текущая версия) :

Я тут подумал и, кажется, понял, что тебе нужно:

typedef struct
{
    size_t size;
    // Остальные служебные поля
} my_struct;

void *my_struct_set_string(void **mystruct, char *str)
{
    assert(mystruct);
    assert(str);
    size_t count = strlen(str);
    …
    
    my_struct *tmp = realloc(*mystruct, sizeof(my_struct) + count);
    if (tmp == NULL)
        return NULL;
    *mystruct = tmp;
    tmp->size = count;
    …
    memcpy(tmp + 1, str, count);
    return tmp;
}

char *my_struct_get_string(void *mystruct, size_t *count)
{
    assert(mystruct);
    assert(count);
    my_struct *metainfo = mystruct;
    void *data = metainfo + 1;
    *count = metainfo->size;
    return data;
}

…

size_t arraysize = get_array_size();
void *mystructs[arraysize];
for (size_t i = 0; i < arraysize; ++i)
{
    …
}

Исправление XMs, :

Я тут подумал и, кажется, понял, что тебе нужно:

typedef struct
{
    size_t size;
    // Остальные служебные поля
} my_struct;

void *my_struct_set_string(void **mystruct, char *str)
{
    assert(mystruct);
    assert(str);
    size_t count = strlen(str);
    …
    
    my_struct *tmp = realloc(*mystruct, sizeof(my_struct) + count);
    if (tmp == NULL)
        return NULL;
    *mystruct = tmp;
    tmp->size = count;
    …
    return tmp;
}

char *my_struct_get_string(void *mystruct, size_t *count)
{
    assert(mystruct);
    assert(count);
    my_struct *metainfo = mystruct;
    void *data = metainfo + 1;
    *count = metainfo->size;
    return data;
}

…

size_t arraysize = get_array_size();
void *mystructs[arraysize];
for (size_t i = 0; i < arraysize; ++i)
{
    …
}

Исходная версия XMs, :

Я тут подумал и, кажется, понял, что тебе нужно:

typedef struct
{
    size_t size;
    // Остальные служебные поля
} my_struct;

void *my_struct_set_string(void **mystruct, char *str)
{
    assert(mystruct);
    assert(str);
    size_t count = strlen(str);
    …
    
    my_struct *tmp = realloc(mystruct, sizeof(my_struct) + count);
    if (tmp == NULL)
        return NULL;
    *mystruct = tmp;
    tmp->size = count;
    …
    return tmp;
}

char *my_struct_get_string(void *mystruct, size_t *count)
{
    assert(mystruct);
    assert(count);
    my_struct *metainfo = mystruct;
    void *data = metainfo + 1;
    *count = metainfo->size;
    return data;
}

…

size_t arraysize = get_array_size();
void *mystructs[arraysize];
for (size_t i = 0; i < arraysize; ++i)
{
    …
}