C++ Reference: Standard C++ Library reference: C Library: clocale: setlocale

本文详细介绍了C++中的setlocale函数,用于设置和获取语言环境。该函数允许程序员根据用户偏好或本地化调整输入/输出和转换操作。在C++程序启动时,默认语言环境为"C",通过setlocale可以切换到系统默认或特定的语言环境。示例代码展示了如何使用setlocale改变并查看语言环境的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++官网参考链接:https://cplusplus.com/reference/clocale/setlocale/

函数 
<clocale>
setlocale
char* setlocale (int category, const char* locale);

设置或获取语言环境
设置当前程序要使用的语言环境信息,更改整个语言环境或部分语言环境。该函数还可以通过传递NULL作为实参locale的值来获取当前语言环境的名称。
语言环境包含有关如何解释和执行某些输入/输出和转换操作的信息,同时考虑到位置和语言特定设置。
大多数运行环境都根据用户首选项或本地化设置了特定的语言环境信息。但是,独立于这个系统语言环境,在启动时,所有C程序都有“C”语言环境,这是一个相当中立的语言环境,具有最小的语言环境信息,允许程序的结果是可预测的。
为了使用环境中设置的默认语言环境,可以使用""作为locale的实参来调用此函数。
在程序启动时,所选择的区域设置是“C”语言环境,这与调用setlocale(LC_ALL, "C")所设置的语言环境相同。
可以通过调用setlocale(LC_ALL, "")来选择环境中选择的语言环境。
当前语言环境中受此函数调用影响的部分由实参category指定。

形参
category
受影响的部分语言环境。它是以下常量值之一,定义为 <clocale>中的宏:

valuePortion of the locale affected(受影响的部分语言环境)
LC_ALLThe entire locale.(整个语言环境)
LC_COLLATEAffects the behavior of strcoll and strxfrm.
LC_CTYPEAffects character handling functions (all functions of <cctype>, except isdigit and isxdigit), and the multibyte and wide character functions.
LC_MONETARY

Affects monetary formatting information returned by localeconv.

(影响localeconv返回的货币格式信息。)

LC_NUMERIC

Affects the decimal-point character in formatted input/output operations and string formatting functions, as well as non-monetary information returned by localeconv.

(影响格式化输入/输出操作和字符串格式化函数中的小数点字符,以及localeconv返回的非货币信息。)

LC_TIMEAffects the behavior of strftime.

locale
包含C语言环境名称的C字符串。这些是特定于系统的,但至少必须存在以下两个语言环境:

locale namedescription
"C"Minimal "C" locale
""Environment's default locale

如果此形参的值为NULL,则该函数不会对当前语言环境做任何更改,但该函数仍然会返回当前语言环境的名称。 

返回值
成功时,指向标识当前为category设置的语言环境的C字符串的指针。如果category为LC_ALL,并且语言环境的不同部分设置为不同的值,返回的字符串以可能因库实现而异的格式提供此信息。
如果函数设置新的语言环境失败,则不修改此当前语言环境,并返回空指针。 

用例
/* setlocale example */
#include <stdio.h>      /* printf */
#include <time.h>       /* time_t, struct tm, time, localtime, strftime */
#include <locale.h>     /* struct lconv, setlocale, localeconv */

int main ()
{
  time_t rawtime;
  struct tm * timeinfo;
  char buffer [80];

  struct lconv * lc;

  time ( &rawtime );
  timeinfo = localtime ( &rawtime );

  int twice=0;

  do {
    printf ("Locale is: %s\n", setlocale(LC_ALL,NULL) );

    strftime (buffer,80,"%c",timeinfo);
    printf ("Date is: %s\n",buffer);

    lc = localeconv ();
    printf ("Currency symbol is: %s\n-\n",lc->currency_symbol);

    setlocale (LC_ALL,"");
  } while (!twice++);

  return 0;
}
当前面的代码运行时,可能的输出之一是:

数据竞争
更改语言环境可能会导致对同一函数或受语言环境影响的任何C库函数的同时调用导致数据竞争。 

异常(C++) 
无抛出保证:此函数从不抛出异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_40186813

你的能量无可限量。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值