2010-10-26 24 views
0

aide nécessaire pour l'impression d'un tableau de pointeurs sur les structures où je me suis trompé? s'il vous plaît aideraide avec des pointeurs et des structures et des tableaux dans c

include <stdio.h> 
include <stdlib.h> 


define HOW_MANY 7 

char *names[HOW_MANY]= {"Simon", "Suzie", "Alfred", "Chip", "John", "Tim", 
     "Harriet"}; 
int ages[HOW_MANY]= {22, 24, 106, 6, 18, 32, 24}; 


struct person 
{ 
    char *name; 
    int age; 
}; 


static void insert (struct person *people[], char *name, int age) { 
    static int nextfreeplace = 0; 


    typedef struct person newperson; 
    newperson *structperson = (newperson*)malloc(sizeof(newperson)); 
    (*structperson).name= name; 
    (*structperson).age = age; 
    printf("%s",(*structperson).name); 

    people[nextfreeplace] = &structperson; 
    printf("%s",(*people[nextfreeplace]).name); 

    nextfreeplace++; 
} 

int main(int argc, char **argv) { 


    struct person *people[HOW_MANY]; 

    for (int c=0; c < HOW_MANY;c++) { 
    insert (people, names[c], ages[c]); 
    } 

    print the people array here 
    for (int i=0; i < HOW_MANY;i++) { 
    printf("%s \n",&(*people[i]).name); 
    } 
    return 0; 
} 
+2

Bienvenue chez SO. S'il vous plaît nous fournir plus d'informations sur ce qui ne va pas pour vous. Il ne suffit pas de coller du code. –

Répondre

0

Beaucoup de problèmes de style:

  • Ne pas lancer la valeur de retour de malloc. Au lieu de transmettre sizeof(newperson) à malloc, utilisez sizeof *structperson. Utilisez l'opérateur ->, c'est-à-dire structperson->name au lieu de (*structperson).name.
  • Nettoyez les noms (qui prêtent à confusion) que vous avez utilisés pour vos variables typedef.
  • Au lieu de HOW_MANY, vous pouvez utiliser sizeof names/sizeof names[0].
+0

merci pour votre aide :) désolé pour le mauvais style c'est l'un de mes premiers programmes c – learner123

+0

Pas de problème - ce ne sont que quelques suggestions pour améliorer. –

0

je veux ajouter les données à struct qui sont personne et ensuite faire un tableau de pointeurs à la personne, puis les imprimer. actuellement je reçois sortie qui n'est pas lisible 11112012. par exemple

2

Lorsque vous malloc, vous déclarez votre structure en tant que valeur au lieu d'un pointeur. Ensuite, vous essayez de vous y référer dès lors comme un pointeur (c'est-à-dire en le désindiquant avec l'astérisque).

Here is how I would write it. Je fais un certain nombre de changements, tels que supprimer la variable statique (vous devez gérer le tableau où vous l'attribuez, votre fonction ne devrait pas stocker l'état du tableau, alors personne d'autre ne peut l'utiliser).