 qsort関数は、クイックソートを簡単に実現できる関数ですが、これのセキュリティ強化版がqsort_s関数です。
qsort関数は、クイックソートを簡単に実現できる関数ですが、これのセキュリティ強化版がqsort_s関数です。
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