2016-12-25 55 views
1

我在C atm的二叉搜索樹上工作,工作良好,節點被插入,找到,打印等。但是,它們的值不正確。我的樹中的每個節點都有一個電話號碼(電話)和一個名字(名字)。電話號碼不是問題,而是名稱。例如,如果我的根與數字1和名稱應該是「邁克」,它說數字= 1和名稱= 1如何向節點添加名稱? (Binary Tree,C)

相同的每隔一個節點。數=名稱。爲什麼?我想這與值是一個字符串而不是一個整數有關,對吧?我代碼中的重要部分如下:

void bst_insert_node(bstree* bst, unsigned long phone, char *name) { 

bst_node* tmp=bst->root; 
bst_node* tmp2; 
bst_node* new_node=(bst_node*)malloc(sizeof(bst_node)); 

new_node->phone=phone; 
new_node->name=name; // THIS LINE 
new_node->left=new_node->right=NULL; 

我需要改變什麼?我現在嘗試了幾件事,但沒有任何工作..

+1

歡迎來到Stack Overflow! [請參閱此討論,爲什麼不在'C'中投射'malloc()'和family的返回值。](http://stackoverflow.com/q/605845/2173917)。 –

+0

歡迎來到Stack Overflow!您介意創建[___MCVE___](http://stackoverflow.com/help/mcve)? –

+0

Thx爲鏈接!不知道。我的發佈代碼是不夠的?我能做些什麼更好?我其實認爲這是正確的方式.. – ykykyk

回答

1

正如你所說,問題是,該名稱是一個字符串類型,其實際上是char*。因此,您只分配一個指向字符串的指針。你必須複製字符串。類似這樣的:

new_node->name = malloc((strlen(name)+1) * sizeof(char)); // allocate 
strcpy(new_node->name, name); // copy the content 

注意malloc語句中的+1。您需要爲字符串終止字符('\ 0')分配一個附加字符。

+0

非常感謝!有道理,現在就行! – ykykyk