I've got my "write_vector" function finished, I think it works:
Code:
void *write_vector(struct vector *v, int index, void *data)
{
    struct data_node *cur_node;
    cur_node = v->data;
    if(v->elem > index)
    {
        cur_node = v->data;
        for(;index;index--)
            cur_node = cur_node->next;
    }
    else
    {
        int c;
        if(v->elem == 0)
            v->data = cur_node = (struct data_node*)malloc(sizeof(struct data_node));
        cur_node->data = calloc(1, v->size);
        for(c = 0;c < index;c++)
        {
            if(c >= v->elem && c < index)
            {
                cur_node->next = (struct data_node*)malloc(sizeof(struct data_node));
                cur_node->next->data = calloc(1, v->size);
            }
            cur_node = cur_node->next;
        }
        v->elem = index + 1;
    }
    cur_node->data = calloc(1, v->size);
    return memcpy(cur_node->data, data, v->size);
}
A pointer to the vector I'm writing to is passed in v, the index of the node to write to in index, and a pointer to the data to be copied to another location, which is stored in a node, is passed in data. It returns a pointer to the data in it's stored location.

And an int main just to debug by playing around with some vectors:
Code:
    int i = 5;
    struct vector *v = init_vector(sizeof(int));
    printf("%i\n", write_vector(v, 1, &i));
    printf("%i\n", v->elem);
    if(read_vector(v, 0) == NULL)
        printf("%s\n", getlasterrstr());
    printf("%i\n", (int*)(read_vector(v, 1)));
I think it's a problem with my understanding of casting, both line 3 and line 7 of main print the same value. The value changes every time I run the prog, so I'm going to guess that what I'm printing is the location of 5. How do I print the 5? Thanks for reading this far, a lot of code, I know .

My structs being used:
Code:
struct data_node{
    void* data;
    struct data_node *next;
};

struct vector{
    int elem;
    int size;
    struct data_node *data;
};