Horacio Castellini
2005-12-09 14:08:17 UTC
Holas
Me está surgiendo un problema con la portabilidad del qsort, supongamos que
quiero ordenar un arreglo de estructuras...
struct mail{
char *autor;
char *tema;
};
.....
struct mail A[50];
......
entonces defino la siguiente función para la ordenación lexicográfica...
int comp_tema(const void *c1,const void *c2)
{
struct mail r1,r2;
r1=*(struct mail*)c1;
r2=*(struct mail*)c2;
return strcmp(r1.tema,r2.tema);
}
Ahora bien cuando aplico en una parte del código la ordenación del arreglo
de registros ...
qsort(Contener,cont,sizeof(struct mail),comp_tema);
en caso de empate... es decir que comp_tema devuelve cero, tenía el
prejuicio que ambas bibliotecas C ordenaban igual... pero no...
Es decir en linux sale...
a1 t1
a3 t1
a4 t1
en cambio en FreeBSD
a4 t1
a1 t1
a3 t1
Como el oreden es crítico en mi caso... que solución puedo implementar para
que esto no me suceda...
Saludos Horacio...
Me está surgiendo un problema con la portabilidad del qsort, supongamos que
quiero ordenar un arreglo de estructuras...
struct mail{
char *autor;
char *tema;
};
.....
struct mail A[50];
......
entonces defino la siguiente función para la ordenación lexicográfica...
int comp_tema(const void *c1,const void *c2)
{
struct mail r1,r2;
r1=*(struct mail*)c1;
r2=*(struct mail*)c2;
return strcmp(r1.tema,r2.tema);
}
Ahora bien cuando aplico en una parte del código la ordenación del arreglo
de registros ...
qsort(Contener,cont,sizeof(struct mail),comp_tema);
en caso de empate... es decir que comp_tema devuelve cero, tenía el
prejuicio que ambas bibliotecas C ordenaban igual... pero no...
Es decir en linux sale...
a1 t1
a3 t1
a4 t1
en cambio en FreeBSD
a4 t1
a1 t1
a3 t1
Como el oreden es crítico en mi caso... que solución puedo implementar para
que esto no me suceda...
Saludos Horacio...