CompareStringW 関数 (stringapiset.h)

識別子で指定された ロケール について、2 つの文字列を比較します。

注意CompareString を誤って使用すると、アプリケーションのセキュリティが損なわれる可能性があります。 正しく比較されない文字列は、無効な入力を生成する可能性があります。 たとえば、非言語的な比較に使用すると、 関数によってセキュリティの問題が発生する可能性があります。これは、バイナリ表現で異なる 2 つの文字列が言語的に同等になる可能性があるためです。 アプリケーションでは、使用する前に文字列の有効性をテストし、エラー ハンドラーを提供する必要があります。 詳細については、「 セキュリティに関する考慮事項: 国際機能」を参照してください。
 
メモ Unicode との互換性を保つには、アプリケーションで CompareStringEx または Unicode バージョンの CompareString を使用する必要があります。 CompareStringEx を優先するもう 1 つの理由は、Microsoft が相互運用性の理由から、新しいロケールのロケール識別子ではなくロケール名の使用に移行していることです。 Windows Vista 以降でのみ実行されるアプリケーションでは、 CompareStringEx を使用する必要があります。
 

構文

int CompareStringW(
  [in] LCID                              Locale,
  [in] DWORD                             dwCmpFlags,
  [in] _In_NLS_string_(cchCount1)PCNZWCH lpString1,
  [in] int                               cchCount1,
  [in] _In_NLS_string_(cchCount2)PCNZWCH lpString2,
  [in] int                               cchCount2
);

パラメーター

[in] Locale

比較に使用されるロケールのロケール識別子MAKELCID マクロを使用してロケール識別子を作成するか、次のいずれかの定義済み値を使用できます。

[in] dwCmpFlags

関数が 2 つの文字列を比較する方法を示すフラグ。 詳細な定義については、CompareStringExdwCmpFlags パラメーターを参照してください。

[in] lpString1

比較する最初の文字列へのポインター。

[in] cchCount1

lpString1 で示される文字列の長さ (終端の null 文字を除く)。 この値は、ANSI バージョンの関数のバイトと Unicode バージョンのワイド文字を表します。 文字列が null で終わる場合、アプリケーションは負の値を指定できます。 この場合、関数は長さを自動的に決定します。

[in] lpString2

比較する 2 番目の文字列へのポインター。

[in] cchCount2

lpString2 で示される文字列の長さ (終端の null 文字を除く)。 この値は、ANSI バージョンの関数のバイトと Unicode バージョンのワイド文字を表します。 文字列が null で終わる場合、アプリケーションは負の値を指定できます。 この場合、関数は長さを自動的に決定します。

戻り値

CompareStringEx に記述されている値を返します。

注釈

「CompareStringEx の備考」を参照してください。

アプリケーションが ANSI バージョンの CompareString を呼び出している場合、関数は指定されたロケールの既定のコード ページを介してパラメーターを変換します。 したがって、アプリケーションで Utf-8 テキストを処理するために CompareString を使用することはできません。

通常、大文字と小文字を区別しない比較では、ロケールがトルコ語またはアゼルバイジャン語の場合でも、 CompareString は小文字の "i" を大文字の "I" にマップします。 NORM_LINGUISTIC_CASING フラグは、トルコ語またはアゼルバイジャン語の場合、この動作をオーバーライドします。 このフラグがトルコ語またはアゼルバイジャン語と組み合わせて指定されている場合、LATIN SMALL LETTER DOTLESS I (U+0131) は小文字の英大文字 I (U+0049) で、ラテン小文字 I (U+0069) は小文字の英大文字 I (U+0130) です。

Windows 8 以降: 関数の ANSI バージョンは Winnls.h で宣言され、Unicode バージョンは Stringapiset.h で宣言されます。 Windows 8前は、両方のバージョンが Winnls.h で宣言されていました。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー stringapiset.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

CompareStringEx

アプリケーションでの並べ替えの処理

各国語サポート

各国語サポート関数

セキュリティに関する考慮事項: 国際的な機能

Unicode 正規化を使用して文字列を表す