arrow 若葉プログラミング塾 > 知識の玉手箱 > C関数リファレンス >
setlocale()
setlocale()

この関数の目的

setlocale()は、ロケールを設定する。

定義

	#include <locale.h>
	char *setlocale(int category, const char *locale);

働き

category で指定される分類のロケールを locale にセットする。 この関数はプログラム全体か一部のロケールを変更したり、問い合わせたりするのに使う。 category に入れられる定数は LC_ で始まるもので、ヘッダファイルに定義されている。 category の意味を以下に示す。

  • LC_ALL
    プログラム全体のロケールを変更する。
  • LC_COLLATE
    strcoll() および strxfrm() の動作に影響する。
  • LC_CTYPE
    文字列操作関数および複バイト文字関数に影響する。
  • LC_MONETARY
    localeconv() が返す通貨の整形に関する情報に影響する。
  • LC_NUMERIC
    入出力関数や文字列操作関数の小数点の文字および、通貨に関係しない localeconv() が返す情報に影響する。
  • LC_TIME
    strftime() の動作に影響する。

返り値は、ロケールが指定されたものに変更できるものなら、 category の新しいロケールを表す文字列へのポインタ、 そうでないならヌルポインタとなりロケールは変更されない。

locale にヌルポインタを渡せば、その category での現在のロケールを表す文字列へのポインタを返し、 プログラムのロケールは変更されない**

返り値のポインタが指す文字列は、次回の呼び出しで引数として使うことによりその分野のロケールを復帰させることができるものである。 文字列はプログラム側によって変更されてはならないが、次回の setlocale() 呼び出しによって上書きされるかもしれない。

(*) ctype.h 内でロケールの影響を受けないのは isdigit() および isxdigit() だけである。

(**) 処理系は複数の分野におけるロケールを一つの文字列に表すように符号化しなければならない。 なぜなら categoryLC_ALL を渡した時に、分野によってロケールが違う場合がありうるからである。

arrow 若葉プログラミング塾 > 知識の玉手箱 > C関数リファレンス >
KC