VS2005以降でないと利用できません。
void qsort_s( void *base, size_t num, size_t width, int (__cdecl *compare )(void *, const void *, const void *), void * context );baseには、並べ替える配列の先頭を指定します。
numには、配列の要素の数を指定します。
widthには、要素のバイト数を指定します。
compareは、比較関数を指定します。
contextは、compare関数がアクセスするオブジェクトのいずれかを指定します。
この関数を使うには、stdlib.h およびsearch.hをインクルードする必要があります。
compare関数は、次のような形をとります。
compare( context, (void *) & elem1, (void *) & elem2 );戻り値は、elem1はelm2より小さい場合はマイナス、等しい場合は0、elm1の方が大きい場合はプラスの値を返さなくてはなりません。
では、サンプルを見てみましょう。
/* qsorts01.c */ #include <stdio.h> #include <stdlib.h> #include <search.h> int comp(void *z, const void *x, const void *y) { return (*(int *)x - *(int *)y); } int main() { int ar[10] = {5, 0, 7, 2, 9, 1, 3, 8, 4, 6}, i; qsort_s((void *)ar, sizeof(ar) / sizeof(int), sizeof(int), comp, ar); for (i = 0; i < 10; i++) printf("%d, ", ar[i]); printf("\n"); return 0; }実行結果は、次のようになります。
使い方は簡単ですね。
Update Sep/08/2007 By Y.Kumei