|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Feb 2008
Messaggi: 22
|
[C] problema con qsort
Salve a tutti,
Dovrei scrivere un programma in C che stampi la lista dei gruppi supplementari in ordine alfabetico. Il problema e' nell'ordinamento con qsort: mi pare di utilizzare la funzione cosi' come da pagina di manuale, ma cio' che fa e' copiare l'ultimo elemento dell'array in ogni singolo elemento dell'array. Prima di qsort, invece, stampo regolarmente tutti i gruppi presenti. Sapreste dirmi il perche'? Grazie mille! Codice:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <grp.h>
#include <string.h>
static int cmpstringp(const void *p1, const void *p2);
static int
cmpstringp(const void *p1, const void *p2){
/* The actual arguments to this function are "pointers to
pointers to char", but strcmp(3) arguments are "pointers
to char", hence the following cast plus dereference */
return strcmp(* (char * const *) p1, * (char * const *) p2);
}
int main(){
int i, ngroups;
gid_t *group;
int nogroups;
long ngroups_max;
char **grouplist;
ngroups_max = sysconf(_SC_NGROUPS_MAX) + 1;
group = (gid_t *)malloc(ngroups_max *sizeof(gid_t));
if ((ngroups = getgroups(ngroups_max, group))<0){
free(group);
return -1;
}
grouplist = malloc(ngroups*sizeof(char *));
for (i = 0; i < ngroups ; i++){
grouplist[i] = getgrgid(group[i])->gr_name;
//printf("%s\t", grouplist[i]);
}
qsort(&grouplist[0], ngroups, sizeof(grouplist[0]), cmpstringp);
for (i = 0; i < ngroups ; i++){
printf("%s\t", grouplist[i]);
}
free(grouplist);
return 0;
}
Ultima modifica di EnricoilP : 20-06-2010 alle 01:10. Motivo: aggiunto linguaggio al titolo |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:13.



















