次の方法で共有


文字列関数の相違点

このトピックでは、Unicode および文字セット情報の処理に使用される文字列関数の違いについて説明します。 これらの関数には、Unicode と Windows コード ページ の両方 実装があり、Unicode と Windows のコード ページ パラメーターをサポートします。

次の文字列関数では、特別なコメントは必要ありません。 Unicode と Windows コード ページの実装は同じように機能します。

文字列長関数の 1 つによって取得される長さの値は、常に通常の文字幅 (Windows コード ページの場合は 8 ビット、Unicode の場合は 16 ビット) に基づきます。 この値は、多くの場合、"文字数" と呼ばれます。この用語は厳密に正しいのは、2 バイト文字セット (DBCS) を使用する Windows コード ページには、実際には 2 つの連続したバイトで表される一部の全角文字があるためです。 Unicode で サロゲートでも同様の状況が発生します。

次の文字列関数は、ユーザーがコントロール パネルで選択した言語から派生した、現在のスレッドのロケールに依存します。 lstrcmp 関数と lstrcmpi 関数では、ANSI 名の設定などのバイト比較は実行されません(たとえば、strcmp )。 代わりに、ロケールの規則に従って文字列を比較します。

  • CharLowerする
  • CharLowerBuffする
  • CharUpperする
  • CharUpperBuffする
  • lstrcmpする
  • lstrcmpiする

次の関数は、使用されているバージョンに応じて、OEM 文字セットと現在の Windows コード ページまたは Unicode の間で変換されます。

印刷関数 (たとえば、StringCbPrintf) は、次の新しいデータ型と変更されたデータ型を形式指定で提供することで Unicode をサポートします。 これらの書式指定は、関数が対応する入力パラメーターを解釈する方法に影響します。

形式の指定 Windows コード ページバージョンのデータ型 Unicode バージョンのデータ型
c 焦がす WCHAR
C WCHAR 焦がす
hc、hC 焦がす 焦がす
hs、hS LPSTR LPSTR
lc、lC WCHAR WCHAR
ls、lS LPWSTR LPWSTR
s LPSTR LPWSTR
S LPWSTR LPSTR

 

出力テキストのデータ型は、常に関数のバージョンによって異なります。 入力パラメーターのデータ型と出力テキストのデータ型が一致しない場合、印刷関数は、必要に応じて Unicode から現在の Windows コード ページへの変換、またはその逆を実行します。

Unicode バージョンの印刷関数の場合、書式指定文字列は Unicode で、出力テキストも同様です。

注意

バッファーの処理が不適切なのは、バッファー オーバーランを伴う多くのセキュリティの問題に関係しています。 Strsafe.h リファレンス 参照してください。 Strsafe.h で定義されている関数は、コード内で適切なバッファー処理のための追加処理を提供します。 このため、組み込みの C/C++ に対応する、および特定の Microsoft Windows 実装を置き換えることを目的としています。 詳細については、「セキュリティに関する考慮事項: 国際機能」を参照してください。

 

Windows API で Unicode を する