qsort_s
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 は k と y の 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++ |
---|---|---|---|
+ |
+ |
+ |
+ |