Horacio Castellini wrote:
> 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...
¡Pues discrimÃ***nalo!
int comp_tema(const void *c1,const void *c2)
{
struct mail r1,r2;
int res;
r1=*(struct mail*)c1;
r2=*(struct mail*)c2;
if((res=strcmp(r1.tema,r2.tema))==0)
return strcmp(r1.autor,r2.autor);
else return res;
}