2014-11-16 2 views
0

Это часть кода, который создает узел, предположим, что c = "correctword". первый printf печатает "TEST correctword". но второй printf печатает «TEST TEST», почему это происходит? от одного к другому, я просто использовал STRCPY, pNo-> item.key должен быть "correctword", что я делаю неправильно ?:Странная ошибка с бинарным деревом и печатью

TNo* TNo_Create (char* c){ 
    TNo* pNo = malloc(sizeof(TNo)); 
    printf("TEST %s", c); 
    strcpy(pNo->item.key, c); 
    printf("TEST %s", pNo->item.key); 
    pNo->item.no = 1; 
    pNo->pLeft = NULL; 
    pNo->pRight = NULL; 
    printf("TEST %s, %d\n", pNo->item.key, pNo->item.no); 
    return pNo; 
} 

Это структура:

typedef struct Item{ 
    char* key; 
    int no; 
} TItem; 

typedef struct No{ 
    TItem item; 
    struct No* pLeft; 
    struct No* pRight; 
} TNo; 
+0

Кроме того, если удалить два первых Printf, программа перестает работать без причины (прежде чем он достигнет последнего Printf) – none

+1

Вы не выделить память 'pNo-> item.key'. – Mat

+0

lol, это было ... C может быть странным с людьми, которые понятия не имеют, что делают hahaha! – none

ответ

2

Чтобы ответить вопрос, вот код, как это должно быть:

TNo* pNo = malloc(sizeof(TNo)); 
printf("TEST %s", c); 
pNo->item.key = malloc(strlen(c)+1); 
strcpy(pNo->item.key, c); 
printf("TEST %s", pNo->item.key); 
Смежные вопросы