strxfrm,wcsxfrm
string.h:インデックス への移動
ヘッダーファイル
string.h
カテゴリ
メモリと文字列の操作ルーチン
プロトタイプ
size_t strxfrm(char *target, const char *source, size_t n);
size_t wcsxfrm(wchar_t *target, const wchar_t *source, size_t n);
説明
文字列の一部を指定された照合順序の文字列に変換します。
strxfrm は,source が指す文字列を最大 n 文字まで変換して target が指す文字列に格納します。結果の文字列に strcmp 関数を適用した場合の戻り値が strcoll 関数の戻り値と一致するように変換が実行されます。
ヌルターミネータを含む最大 n 文字が target にコピーされます。
strxfrm は,文字列を現在のロケールの LC_COLLATE カテゴリにしたがって特殊文字列に変換します。作成された特殊文字列は,同じタイプの別の文字列とバイト単位で比較して,ロケールに基づいた照合結果を得ることができます。これらの特殊文字列は,キーまたはトークン化文字列と考えることができ,別のロケールとは互換性がありません。
トークン化文字列内のトークンは,現在のロケールの照合テーブルから strcoll によって使用される照合重みに基づいて作成されます。
文字列のすべてのレベルが処理されるか,トークン化文字列の長さが maxlen パラメータに等しくなった場合にのみ,処理が停止されます。
すべての冗長なトークンは,各レベルのトークンのセットから削除されます。
トークン化文字列のバッファは,結果のトークン化文字列を格納できるだけの十分な大きさが必要です。このバッファの長さは,文字列のサイズ,照合のレベル数,各レベルの規則,および文字列中に特殊文字を含むかどうかによって異なります。特殊文字を含む場合は,特別な文字処理を行うために,より多くの領域が必要になります。たとえば,一部のロケールでは,フランス語の文字「oe」は,各レベルで複数の照合重みに拡張されるため,文字自体に 2 倍の領域を必要とします。置き換え文字を含む部分文字列にも,より多くの領域が必要です。
文字列に必要なバッファサイズを決定するための公式はありませんが,少なくとも(レベル数×文字列長)が必要です。
戻り値
コピーされた文字数(ヌルターミネータを含まない)。戻り値が n 以上の場合,target の内容は不確定です。
例
#include <stdio.h>
#include <string.h>
#include <alloc.h>
int main(void)
{
char *target;
char *source = "Frank Borland";
int length;
/* target 文字列用の領域を割り当てます */
target = (char *) calloc(80, sizeof(char));
/* source を target にコピーし,長さを取得します */
length = strxfrm(target, source, 80);
/* 結果を出力します */
printf("%s has the length %d\n", target, length);
return 0;
}
移植性
POSIX | Win32 | ANSI C | ANSI C++ | |
---|---|---|---|---|
strxfrm |
+ |
+ |
+ |
+ |
wcsxfrm |
+ |
+ |
+ |