函数原型:char* setlocale (int category, const char* locale);函数
setlocale位于头文件,setlocale() 函数既能够用来对当前程序进行地域设置(本地设置、区域设置),也能够用来获取当前程序的地域设置信息,使用setlocale须要两个参数编码
第一个参数category:spa
用来设置地域设置的影响范围。地域设置包含日期格式、数字格式、货币格式、字符处理、字符比较等多个方面的内容,当前的地域设置能够只影响某一方面的内容,也能够影响全部的内容,操作系统
category 的值不能随便设置,必须使用 <locale.h> 中定义的宏3d
第二个参数locale:指针
用来设置地域设置的名称(字符串),也就是设置为哪一种地域,对于不一样的平台和不一样的编译器,地域设置的名称可能会不一样,C语言标准没有干预太多。C语言标准只是规定,各个组织在实现编译器时至少要支持如下三个名称:code
setlocale函数的返回值:blog
若是 setlocale() 执行成功,那么返回一个指向字符串的指针,该字符串包含了当前地域设置的名称。也就是说,setlocale() 会将当前地域设置的名称返回字符串
若是 setlocale() 执行失败(例如为 locale 指定的名称不存在,就会致使地域设置失败),那么返回空指针NULL原型
若是程序中没有用setlocale函数设置地域等其余参数,那么程序运行时locale 被初始化为默认的 C locale,其采用的字符编码是全部本地 ANSI 字符集编码的公共部分,是用来书写C语言源程序的最小字符集,
下面用setlocale来获得当前使用的地域设置
char *p; p = setlocale(LC_ALL, NULL); printf("%s\n", p);
运行结果:
从上面能够看出当前编译器使用的地域设置是C,若是想用宽字符来输出中文,却仍然使用默认的地域设置(C)就会出现问题,下面尝试用setlocale来解决宽字符输出中文的问题
wchar_t ss[20]; char *p; p = setlocale(LC_ALL, NULL); ss[0] = _T('中'); ss[1] = _T('文'); ss[2] = _T('\0'); wprintf(L"%ls\n", ss); printf("地域设置:%s\n", p);
运行结果:
从上面的运行结果能够看出'中' '文'两个字并无被正确的输出,由于locale被初始化为默认的C,其采用的字符编码是全部本地ANSI字符集编码的公共部分,是用来书写C语言源程序的最小字符集,下面用setlocale来把地域设置为简体中文,修改后的代码以下:
wchar_t ss[20]; char *p; p = setlocale(LC_ALL, ""); ss[0] = _T('中'); ss[1] = _T('文'); ss[2] = _T('\0'); wprintf(L"%ls\n", ss); printf("地域设置:%s\n", p);
运行结果:
由于操做系统是中文环境,因此上面的代码中能够改成
效果是同样的