qsort_s

提供: RAD Studio
移動先: 案内検索

stdlib.h:インデックス への移動



ヘッダー ファイル

stdlib.h

カテゴリ

検索およびソート ユーティリティ

プロトタイプ

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);

説明

qsort の代わりとなるもので、セキュリティが強化されています。

qsort_s は、クイックソート アルゴリズムの "折衷" 版を実装したものです。qsort_s では、__fcmp で指定されるユーザー定義の比較関数を繰り返し呼び出すことで、テーブル内のエントリをソートします。

  • __base は、ソートするテーブルの開始点(0 番目の要素)を指します。
  • __nelem はテーブル内のエントリ数です。
  • __width はテーブル内の各エントリのサイズ(バイト単位)です。

__fcmp は比較関数であり、_USERENTRY 呼び出し規約で使用する必要があります。

  • fcmp は ky の 2 つの引数を受け取ります。それぞれはテーブル内のエントリへのポインタです。 __context は、より汎用的なユーザー実装を可能にするために直接 __fcmp 関数に渡されます、 比較関数は、各参照先アイテム(*k*y)を比較し、比較の結果に基づいた整数を返します。

__fcmp は、以下のような値を取る整数を返します。

  • *k < *y の場合は < 0
  • *k == *y の場合は == 0
  • *k > *y の場合は > 0


戻り値

qsort_s は、正常に終了した場合にはゼロを返し、そうでない場合はゼロ以外の値を返します。

#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) );
}

移植性

POSIX Win32 ANSI C ANSI C++

+

+

+

+

関連項目