この関数の目的
strxfrm()は、ロケール依存の文字列をロケール非依存で比較できるように変換する。
定義
#include <string.h> size_t strxfrm(char *s1, const char *s2, size_t n);
働き
この関数は、 s2 が指す文字列を変換し、結果の文字列を s2 が指す配列に格納する。 変換は、 strcmp() が二つの変換された文字列に適用された時に、 strcoll() が変換前の文字列に適用された時の結果に対応する負、ゼロ、正の値を返すようになされる。 終端のヌル文字を含む n 文字以下の文字が s1 が指す結果の文字列に置かれる。 n がゼロの場合、 s1 はヌルポインタでも良い。 重複するオブジェクト間で転写が行われた場合の動作は未定義である。
返り値は、変換された文字列の(終端のヌル文字を含まない)長さである。 返り値が n 以上であった場合の s1 が指す配列の内容は不定になる。
解説
strcoll() を使わずに strcmp() で正しく比較できるように文字列を変換するのがこの関数であるが、変換した文字列は比較できること以外は何も規定されていない。 中身が文字コードとして読めるものだという保証は無い。
返り値が n 以上ならば、返り値と同じ(より大きくてもよいが)大きさの文字列を新たに確保し、再び変換をかける必要がある。