totofetmax a dit :
je voudrais savoir si ce code est portable et si ce n'est pas le cas, pourquoi ?
je me pose cette question car il me semble que la fonction est correcte lorsqu'on utilise le code ASCII mais ça ne l'est plus lorsqu'on utilise le code EBCDIC.
En ASCII, les lettres sont contigues et pas en EBCDIC
Certes, mais le langage C exige que le charset utilisé ait des chiffres (
digits) dont les valeurs soient consécutives. Ce code est donc portable.
---------------------------
Citation :
Je voudrais aussi savoir pourquoi ce code, me produit une erreur de segmentation et comment corriger cela
void bubbleSort(char **tab, int (*cmp)(void *, void *))
{
char **p1, **p2;
for(p1=tab; *p1!=NULL; ++p1)
for(p2=p1+1; *p2!=NULL; ++p2)
if((*cmp)(*p1,*p2)>0)
{
char buf[BUFSIZ]; /*supposé tres grand*/
strcpy(buf,*p1);
strcpy(*p1,*p2);
strcpy(*p2,buf);
}
}
Ca ne se fait pas de swapper des tableaux. On préfère swapper des pointeurs, c'est plus efficace. BUFSIZ a beau être grand, aucun contrôle de débordement n'est fait...
Au fait, c'est bien un tableau de pointeurs que tu tries ? Il n'y a donc pas à recopier les données. Les pointeurs suffisent.
D'autre part, on a pas le code de comparaison. Une erreur dans se code peut se révéler fatale...