2015-04-02 3 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.data поставил temp->data. Кроме того, strncpy() принимает три аргумента. Вы должны добавить максимальное количество символов для копирования в качестве третьего аргумента.

+0

эй спасибо! он работал после того, как я заменил Damn.data данными temp->. Кроме того, я использовал strcpy вместо strncpy(), поэтому теперь он отлично работает. Но я хотел бы спросить, почему это не работает с Damn.data, казалось мне законным. Есть идеи? – jimo

+1

Поскольку вы не * typedef * ваше определение структуры Damn, это также небольшой блок памяти глобального объема, который не инициализирован. Но ваш новый узел - это сегмент памяти кучи, который дал вам malloc, и находится в указателе * temp *. Ваш исходный код попытался скопировать новую строку в этот бесполезный блок памяти глобального объема, а не в надлежащую кучную память. Если бы вы определили определение структуры Damn, тогда компилятор бы выбросил ошибку в оператор strncpy, и вы бы знали, что строка была неправильной. – cybermike

Смежные вопросы