2015-03-02 9 views
1

Я попытался создать функцию, которая дублирует структуру в указатель, но вот в чем проблема: в структуре есть вкладка char Я не могу присвоить свое первоначальное значение новой структуре.Как дублировать структуру в указатель с функцией malloc [C-Programming]

Функция:

Planete *dupliquer(Planete *p){ 
    Planete *res; 
    res = (Planete*) malloc(sizeof(Planete)); 
    if(res == NULL){ 
    printf("Erreur d'allocation...\n"); 
    exit(1); 
    } 
    res->nomplanete = p->nomplanete; 
    res->rayon = p->rayon; 

    return res; 
} 

А вот ошибка составитель:

error: incompatible types when assigning to type ‘char[20]’ from type ‘char *’ 
    res->nomplanete = p->nomplanete; 
       ^

Можете ли вы помочь мне, будет очень приятно. Спасибо за поддержку !

+4

'тетсру (Рез, р, SizeOf (Planete))' – tux3

+3

"дублировать структуру в указатель" А? – Lundin

+1

Спасибо, но я должен использовать функцию malloc, есть ли у вас решение для моей ошибки? –

ответ

2

Похоже, что вам не нужен отдельный malloc для nomplanete, потому что это массив. В таких ситуациях вы должны использовать strcpy, как это:

strcpy(res->nomplanete, p->nomplanete); 

Если все члены Planete примитивы или массивы, вы могли бы просто memcpy все вещи, как это:

res = malloc(sizeof(Planete)); // No need to cast 
if(res == NULL){ 
    printf("Erreur d'allocation...\n"); 
    exit(1); 
} 
memcpy(res, p, sizeof(Planete)); 

Если nomplanete были указатель, вы должны сделать отдельный malloc или использовать strdup:

res->nomplanete = malloc(1+strlen(p->nomplanete)); 
strcpy(res->nomplanete, p->nomplanete); 
+0

Если «nomplanete» был массивом в качестве члена структуры, то memcpy() для всей структуры работал бы очень хорошо. – Lundin

+0

Спасибо, что работает! : D –

+0

Спасибо за вашу поддержку :) –

0

Похоже, что «nomplanete» является членом массива символов структуры «Planete». В этом случае просто написать функцию, как:

Planete* dupliquer (const Planete* p) 
{ 
    Planete* res; 
    res = malloc(sizeof(Planete)); 
    if(res == NULL){ 
    printf("Erreur d'allocation...\n"); 
    exit(1); 
    } 
    memcpy(res, p, sizeof(Planete)); 

    return res; 
} 
+0

Наконец, я использовал strcpy, потому что нам пришлось это делать без memcpy^^ Спасибо! –