2014-05-21 95 views
1

試圖建立一個節點用這個結構,所以我有奇怪的問題:節點創建Ç

struct node { 
    char *value ; 
    unsigned int count ; 
    struct node *next ; 
} ; 

這裏就是我有

struct node *make_node(char *value) { 
    struct node *np = NULL; 
    *np = (*np)malloc(sizeof(*np)); 
    char* copy = (char*)malloc(sizeof(strlen(value)+1)); 
    strcpy(copy, *value); 
    *np -> *value = copy; 
    *np -> count = 1; 
    *np -> next = null; 
    return np ; 
} 

弦形部分是扔我,我想。我收到了一堆不兼容的指針類型。

- 編輯 - 回答,謝謝大家對我助人爲樂

+3

語言語法違反該權證單獨提到你[* *任何像樣的**書上的C語言程序設計**](http://stackoverflow.com/questions/562303/the-definitive- C-書指南和列表)。 – WhozCraig

回答

4

分配行應爲:

np = malloc(sizeof *np); 

注:

  1. 沒有星號前np左側手邊,你不想取消引用指針,你想分配給它。
  2. No cast of malloc()'s return value

然後,你必須有:

np->value = copy; 

記住a->b(爲struct指針a)指(*a).b

最後,拼寫爲NULL

假設你有strdup(),你的函數可以這樣寫:

struct node * make_node(const char *value) { 
    struct node *np = malloc(sizeof *np); 
    if(np != NULL) 
    { 
     np->value = strdup(value); 
     if(np->value != NULL) 
     { 
      np->count = 1; 
      np->next = NULL; 
      return np; 
     } 
     free(np); 
    } 
    return NULL; 
} 
1
strcpy(copy, *value); 

應該

strcpy(copy, value); 

因爲strcpy需要一個字符指針作爲第二個參數,源地址。

3
struct node *make_node(char *value) { 

你的函數不修改value,所以聲明它const一個良好的習慣。

struct node *make_node(char const *value) { 

*np = (*np)malloc(sizeof(*np)); 

不要提領的分配指針。在C中鑄造malloc也是無用的,並且可以隱藏錯誤。

np = malloc(sizeof(*np)); 

注意,強烈建議您檢查的mallocNULL結果。內存分配可能會失敗。


char* copy = (char*)malloc(sizeof(strlen(value)+1)); 

您正確計算字符串這裏strlen(value)+1的大小,但之後的sizeof不正確。它只會返回int的大小。

char* copy = malloc(strlen(value)+1); 

strcpy(copy, *value); 

strcpy需要(char *, char const *)(char *, char)

strcpy(copy, value); 

*np -> *value = copy; 
*np -> count = 1; 

同樣,非關聯化是不是你想要的。只分配指針值(地址)。

np->value = copy; 
np->count = 1; 

*np -> next = null; 

你可能是指NULL這裏。

np->next = NULL;