qsort_s

De RAD Studio
Aller à : navigation, rechercher

Remonter à stdlib.h - Index


Fichier en-tête

stdlib.h

Catégorie

Utilitaires de recherche et de tri

Prototype

errno_t qsort_s(void * __base, rsize_t __nelem, rsize_t __width, int (_USERENTRY *__fcmp)(const void *k, const void *y, void *__context), void *__context);

Description

Remplace qsort en ajoutant des améliorations relatives à la sécurité.

qsort_s est une implémentation du variant "médian des trois" de l'algorithme de tri rapide. qsort_s trie les entrées d'un tableau en appelant de façon répétitive la fonction de comparaison, définie par l'utilisateur, pointée par __fcmp.

  • __base pointe sur la base (élément 0) du tableau à trier.
  • __nelem est le nombre d'entrées du tableau.
  • __width est la taille de chaque entrée du tableau, en octets.

__fcmp, la fonction de comparaison, doit être utilisée avec la convention d'appel _USERENTRY.

  • fcmp accepte deux arguments, k et y, chacun étant un pointeur sur une entrée du tableau. __context est passé directement à la fonction __fcmp afin de permettre une implémentation utilisateur plus générique. La fonction de comparaison compare chacun des éléments *k et *y, et renvoie un entier basé sur le résultat de la comparaison.

__fcmp renvoie un entier qui prend ses valeurs comme suit :

  • < 0 si *k < *y
  • == 0 si *k == *y
  • > 0 si *k > *y


Valeur renvoyée

qsort_s renvoie zéro en cas de succès. Sinon, une valeur différente de zéro est renvoyée.

Exemple

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int sort_function( const void *a, const void *b, void* context);
char list[5][4] = { "cat", "car", "cab", "cap", "can" };
int main(void)
{
   int  x;
   qsort_s((void *)list, 5, sizeof(list[0]), sort_function, NULL);
   for (x = 0; x < 5; x++)
      printf("%s\n", list[x]);
   return 0;
}
int sort_function( const void *a, const void *b, void* context)
{
   return( strcmp((char *)a,(char *)b) );
}

Portabilité

POSIX Win32 ANSI C ANSI C++

+

+

+

+

Voir aussi