Копирование памяти на член гибкого массива - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь написать функцию выделения для структуры с гибким членом массива. Я реализовал это следующим образом:

int ns_request_character(char *char_out){
     //returns 0 on success, -1 on error
}

struct ns_fam{
    size_t size;
    char data[];
};

struct ns_fam * ns_allocate(size_t size){
    char data[size];
    for(size_t i = 0; i < size; i++){
        char char_out;
        if(ns_request_character(&char_out) == -1){
            return NULL;
        }
        data[i] = char_out;
    }
    struct ns_fam *ns_fam = malloc(sizeof(*ns_fam) + sizeof(char[size]));
    if(ns_fam){
        ns_fam->size = size;
        memcpy(ns_fam->data, data, sizeof(data));  // <-- ???
    }
    return ns_fam;
}

В чем я не уверен, так это в копировании памяти массива переменной длины стека в элемент гибкого массива. Я сделал это таким образом, чтобы избежать обработки free структуры в случае, если ns_request_character вернул -1.

...