2016-10-03 2 views
1

J'essaie d'insérer une chaîne codée en dur dans une valeur tableau tableau dans une structure en utilisant seulement C, donc j'ai utilisé memcpy, en suivant l'exemple dans un autre message. Mais pour une raison quelconque, je continue à obtenir ce qui ressemble à une adresse en sortie, je ne sais pas pourquoi.en essayant de copier une chaîne c dans une struct en utilisant seulement C

ma console affiche: [(2,7532592) (1,7524424)] et d'autres nombres longs comme ça à chaque fois. J'ai vérifié tellement d'exemples sur la façon de copier une séquence de caractères dans une chaîne c, et il semble que celui-ci était exactement le même. Je pourrais juste avoir du mal à comprendre les pointeurs. Je ne sais pas pourquoi il crache la valeur de l'adresse. Quelqu'un peut-il signaler ce que je fais mal? Je m'excuse pour tout manque de connaissance de ma part. Mon code raccourci vers le bas est ci-dessous:

struct node 
{ 
    int key; 
    char month[20]; 
    struct node *next; 
}; 

struct node *head = NULL; 
struct node *current = NULL; 

//display the list 
void printList() 
{ 
    struct node *ptr = head; 
    printf("\n[ "); 

    //start from the beginning 
    while(ptr != NULL) 
    {   
     printf("(%d,%d) ",ptr->key,ptr->month); 
     ptr = ptr->next; 
    } 

    printf(" ]"); 
} 

//insert link at the first location 
void insertFirst(int key, char * month) 
{ 
    //create a link 
    struct node *link = (struct node*) malloc(sizeof(struct node)); 

    link->key = key; 

    memcpy(link->month, month, 20); 
    link->month[19] = 0; // ensure termination 

    //point it to old first node 
    link->next = head; 

    //point first to new first node 
    head = link; 
} 

int main() { 

    insertFirst(1,"Jan"); 
    insertFirst(2,"March"); 

    printf("Original List: "); 

    //print list 
    printList(); 
} 
+0

Remarque 'link-> month [19] = 0;' est une bonne idée pour assurer la terminaison de caractère nul. Envisagez des alternatives qui évitent les numéros magiques. 'memcpy (lien-> mois, mois, taille du lien-> mois); lien-> mois [sizeof lien-> mois - 1] = 0; 'ou' lien-> mois [0] = 0; strncat (lien-> mois, mois, taille du lien-> mois); ' – chux

+0

merci, bonne astuce! – 2316354654

Répondre

2

Essayez

printf("(%d,%s) ",ptr->key,ptr->month); 

place pour le problème "de sortie curieux".

+0

vous a donné la meilleure réponse depuis que vous étiez le premier – 2316354654

3

Vous imprimez le pointeur ptr->month, pas la chaîne réelle. Essayez: printf("(%d,%s) ",ptr->key,ptr->month); (%s au lieu de %d).

+0

WOWWWWWW merci, je n'ai pas utilisé C depuis longtemps. – 2316354654