第137章 qsort関数のセキュリティ強化版


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;
}
実行結果は、次のようになります。

使い方は簡単ですね。




[Index][総合Index] [Previous Chapter] [Next Chapter]

Update Sep/08/2007 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。