Hello,
pour un projet en C, j'aimerais créer une liste de structure (pour pouvoir maintenir une liste d'utilisateur).
Voilà comment je procède :
Déclarer en globale :
Voici une fonction que j'utilise pour ajouter un user :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 GSList *listUser; (j'utilise la GSList de la glib) FicheUser *fiche; (ma structure avec laquelle je veux faire ma liste)
Voici une fonction que j'utilise pour afficher mes users :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 void choixAjoutUser(int type){ int numUser; //FicheUser fiche; fiche = (FicheUser*) malloc(sizeof(FicheUser)+20); //listeuser affiche les users UNIX listeUser(); scanf( "%d", &numUser ); fiche->nom = (char*) malloc(sizeof(char*)*20); fiche->nom = tabNom[numUser]; fiche->type = type; fiche->UID = tabUID[numUser]; fiche->pid = 0; //on ajoute le user UNIX dans le tableau des users //tabUser[nbUser] = tabUID[UIDuser]; //table[nbUser] = fiche; listUser = g_slist_append(listUser, fiche); //on ouvre un terminal pour le nouveau user : creationUser(tabNom[numUser],type); nbUser++; }
Est ce que c'est la bonne façon de faire ? Je trouve cela bizarre de faire un malloc sur une variable globale pour éviter qu'elle se fasse écraser lorsque la fonction est appelée une deuxième fois.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 int listeUserProject(){ int i, t; FicheUser* fiche; i = 0; GSList *node = listUser; while(node){ fiche = node->data; printf("Numéro : %d --- Nom : %s \t UID : %d \t PID : %d \t Status : %s \n",i,fiche->nom,fiche->UID,fiche->pid,tabType[fiche->type]); node = g_slist_next(node); i++; } if(i == 0){ printf("Il n'existe aucun utilisateur dans ce projet"); } return i; }
Merci pour vos éclaircissement![]()
Partager