2015-04-02 44 views
1

我想將節點添加到鏈接列表的開頭。該程序要求用戶輸入他想輸入的姓名的數量,所以如果我輸入3,它應該要求我輸入3個不同的名字並將它們顯示在列表中,而不是該程序重複地輸出相同的名稱。嘗試插入節點,而不是重複的值

struct node{ 

     char data[20]; 
     struct node* link; 

    }Damn; 


    struct node* head; 

    //Insert 
    void Insert(char p[20]){ 

     struct node* temp = (struct node*) malloc(sizeof(struct node)); 
     strncpy(Damn.data, p); 
     temp->link = head; 
     head = temp; 
    } 

    //Print 
    void Print() 
    { 
     struct node* temp = head; 
     while(temp != NULL){ 
     printf(" %s \n", Damn.data); 
     temp = temp->link; 
     } 
    } 


    //Main 
    int main(){ 

     head = NULL; 

     int i, n; 
     char p[20]; 

     printf("How many names you want to enter\n"); 
     scanf("%d", &n); 

     for(i=1; i<(n+1); i++){ 
     printf("Enter the %dth name", i); 
     scanf("%s", p); 
     Insert(p); 
     Print(); 
     } 

回答

0

而不是Damn.datatemp->data。另外,strncpy()有三個參數。您應該添加要複製的最大字符數作爲第三個參數。

+0

嘿謝謝!它在我用temp-> data替換Damn.data之後起作用。另外,我使用strcpy而不是strncpy(),所以它現在工作的很好。但是,我想問問爲什麼它不與Damn.data合作,似乎對我而言是合法的。任何想法? – jimo 2015-04-03 04:12:52

+1

既然你沒有* typedef *你的Damn結構定義,它也是一個未初始化的全局範圍內存塊。但是你的新節點是malloc給你的一段堆內存,並且在* temp *指針中。您的原始代碼試圖將新字符串複製到無用的全局範圍內存塊中,而不是正確的堆分配塊內存。如果你已經定義了Damn結構體的定義,那麼編譯器會在strncpy語句中拋出一個錯誤,並且你會知道該行是錯誤的。 – cybermike 2015-04-03 09:05:59

相關問題