名前空間
変種
操作

setlocale

提供: cppreference.com
< c‎ | locale
ヘッダ <locale.h> で定義
char* setlocale( int category, const char* locale);

setlocale 関数は指定されたシステムロケールまたはその一部を新しい C のロケールとして設定します。 変更は次に setlocale を呼ぶまで有効で、すべてのロケール対応の C のライブラリ関数の実行に影響を与えます。 locale がヌルポインタの場合、 setlocale は現在の C のロケールを変更せずに問い合わせます。

目次

[編集] 引数

category - ロケールカテゴリ識別子、 LC_xxx マクロのひとつ。 ヌルでも構いません
locale - システム固有のロケール識別子。 ユーザ推奨ロケールのためには ""、最小限のロケールのためには "C" を指定できます

[編集] 戻り値

変更 (もしあれば) を適用した後の C のロケールを識別するヌル終端ナロー文字列を指すポインタ、または失敗した場合はヌルポインタ。

setlocale のこの呼び出しで使用されたカテゴリと返された文字列のコピーは、ロケールをこの呼び出しの終わりの状態に復元するために後にプログラムで使用することができます。

[編集] ノート

プログラムの開始時、いかなるユーザのコードも実行される前に、 setlocale(LC_ALL, "C"); と同等の処理が実行されます。

戻り値の型は char* ですが、その指している先の文字を変更することは未定義動作です。

setlocale はロケール依存の関数の実行に影響を与えるグローバルな状態を変更するため、あるスレッドで setlocale を呼び、同時に別のスレッドで fprintf, isprint, iswdigit, localeconv, tolower, fscanf, ispunct, iswgraph, mblen, toupper, isalnum, isspace, iswlower, mbstowcs, towlower, isalpha, isupper, iswprint, mbtowc, towupper, isblank, iswalnum, iswpunct, setlocale, wcscoll, iscntrl, iswalpha, iswspace, strcoll, wcstod, isdigit, iswblank, iswupper, strerror, wcstombs, isgraph, iswcntrl, iswxdigit, strtod, wcsxfrm, islower, iswctype, isxdigit のいずれかを実行することは、未定義動作です。

POSIX は "POSIX" という名前のロケールも定義しています。 これは常にアクセス可能であり、デフォルトの最小限の "C" ロケールとまったく同等です。

POSIX は、返されたポインタが指す先の文字列の内容だけでなく、返されたポインタも、 setlocale の今後の呼び出しで無効化されるかもしれないと規定しています。

[編集]

#include <stdio.h>
#include <locale.h>
#include <time.h>
#include <wchar.h>
 
int main(void)
{
    // the C locale will be UTF-8 enabled English;
    // decimal dot will be German
    // date and time formatting will be Japanese
    setlocale(LC_ALL, "en_US.UTF-8");
    setlocale(LC_NUMERIC, "de_DE.utf8");
    setlocale(LC_TIME, "ja_JP.utf8");
 
    wchar_t str[100];
    time_t t = time(NULL);
    wcsftime(str, 100, L"%A %c", localtime(&t));
    wprintf(L"Number: %.2f\nDate: %Ls\n", 3.14, str);
}

出力例:

Number: 3,14
Date: 月曜日 2017年09月25日 13時00分15秒

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.11.1.1 The setlocale function (p: 224-225)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.11.1.1 The setlocale function (p: 205-206)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.4.1.1 The setlocale function

[編集] 関連項目

setlocaleためのロケールカテゴリ
Original:
locale categories for setlocale
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(マクロ定数) [edit]
setlocaleC++リファレンス