setlocale()函数详解——C语言

时间:2021-03-29 09:52:55

setlocale函数

函数原型:char* setlocale (int category, const char* locale);

setlocale位于头文件setlocale()函数详解——C语言,setlocale() 函数既可以用来对当前程序进行地域设置(本地设置、区域设置),也可以用来获取当前程序的地域设置信息,使用setlocale需要两个参数

第一个参数category:

用来设置地域设置的影响范围。地域设置包含日期格式、数字格式、货币格式、字符处理、字符比较等多个方面的内容,当前的地域设置可以只影响某一方面的内容,也可以影响所有的内容,

category 的值不能随便设置,必须使用 <locale.h> 中定义的宏

setlocale()函数详解——C语言

setlocale()函数详解——C语言

第二个参数locale:

用来设置地域设置的名称(字符串),也就是设置为哪种地域,对于不同的平台和不同的编译器,地域设置的名称可能会不同,C语言标准没有干预太多。C语言标准只是规定,各个组织在实现编译器时至少要支持以下三个名称

setlocale()函数详解——C语言

setlocale函数的返回值:

如果 setlocale() 执行成功,那么返回一个指向字符串的指针,该字符串包含了当前地域设置的名称。也就是说,setlocale() 会将当前地域设置的名称返回

如果 setlocale() 执行失败(例如为 locale 指定的名称不存在,就会导致地域设置失败),那么返回空指针NULL

如果程序中没有用setlocale函数设置地域等其他参数,那么程序运行时locale 被初始化为默认的 C locale,其采用的字符编码是所有本地 ANSI 字符集编码的公共部分,是用来书写C语言源程序的最小字符集,

下面用setlocale来得到当前使用的地域设置

char *p;

p = setlocale(LC_ALL, NULL);
printf("%s\n", p);

运行结果:

setlocale()函数详解——C语言

从上面可以看出当前编译器使用的地域设置是C,如果想用宽字符来输出中文,却仍然使用默认的地域设置(C)就会出现问题,下面尝试用setlocale来解决宽字符输出中文的问题

wchar_t ss[];
char *p; p = setlocale(LC_ALL, NULL);
ss[] = _T('中');
ss[] = _T('文');
ss[] = _T('\0');
wprintf(L"%ls\n", ss); printf("地域设置:%s\n", p);

运行结果:

setlocale()函数详解——C语言

从上面的运行结果可以看出'中' '文'两个字并没有被正确的输出,因为locale被初始化为默认的C,其采用的字符编码是所有本地ANSI字符集编码的公共部分,是用来书写C语言源程序的最小字符集,下面用setlocale来把地域设置为简体中文,修改后的代码如下:

wchar_t ss[];
char *p; p = setlocale(LC_ALL, "");
ss[] = _T('中');
ss[] = _T('文');
ss[] = _T('\0');
wprintf(L"%ls\n", ss); printf("地域设置:%s\n", p);

运行结果:

setlocale()函数详解——C语言

因为操作系统是中文环境,所以上面的代码中setlocale()函数详解——C语言可以改为setlocale()函数详解——C语言效果是一样的

setlocale()函数详解——C语言的更多相关文章

  1. malloc函数详解 C语言逻辑运算符

    今天写线性表的实现,又遇到了很多的难题,C语言的指针真的没学扎实.很多基础都忘了. 一是 :malloc 函数的使用. 二是:C语言逻辑运算符. 一.原型:extern void *malloc(un ...

  2. 【C语言】printf函数详解

    C语言printf函数详解 一.相关基础知识 请求printf()打印变量的指令取决于变量的类型,例如打印整数用%d符号,打印字符用%c符号,这些符号称为转换说明(conversion specifi ...

  3. 【转载】C语言itoa&lpar;&rpar;函数和atoi&lpar;&rpar;函数详解&lpar;整数转字符C实现&rpar;

    本文转自: C语言itoa()函数和atoi()函数详解(整数转字符C实现) 介绍 C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串. int/float to ...

  4. C语言memset函数详解

    C语言memset函数详解 memset() 的作用:在一段内存块中填充某个给定的值,通常用于数组初始化与数组清零. 它是直接操作内存空间,mem即“内存”(memory)的意思.该函数的原型为: # ...

  5. Netsuite Formula &gt&semi; Oracle函数列表速查&lpar;PL&sol;SQL单行函数和组函数详解&rpar;&period;txt

    PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序.在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类: 单行函数 ...

  6. loadrunner&&num;160&semi;脚本开发-&&num;160&semi;web&lowbar;url函数详解

    脚本开发- web_url函数详解 by:授客 QQ:1033553122   加载指定url的web页面(GET请求) C语言函数 int web_url( const char *StepName ...

  7. 详解 Go 语言中的 time&period;Duration 类型

    swardsman详解 Go 语言中的 time.Duration 类型swardsman · 2018-03-17 23:10:54 · 5448 次点击 · 预计阅读时间 5 分钟 · 31分钟之 ...

  8. CString 的成员函数详解

    CSTRING的成员函数详解   typedef ATL::CStringT< TCHAR, StrTraitMFC_DLL< TCHAR > > CString;CStrin ...

  9. 详解Go语言调度循环源码实现

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客: https://www.luozhiyun.com/archives/448 本文使用的go的源码15.7 概述 提到"调度&q ...

随机推荐

  1. JS预解析

    1.在逐行读js代码前,解析器会先提取所有声明的var变量和函数 js解析器会先把脚本里所有var变量声明读一遍,但是它只读变量名字,不读变量值,一开始它会赋给所有读到的var变量一个[未定义]的值. ...

  2. 安装Windows Metasploit Framework

    Installing the Metasploit Framework on Windows 1. Visit http://windows.metasploit.com/metasploitfram ...

  3. lintcode&colon;二叉树的所有路径

    二叉树的所有路径 给一棵二叉树,找出从根节点到叶子节点的所有路径. 样例 给出下面这棵二叉树: 1 / \ 2 3 \ 5 所有根到叶子的路径为: [ "1->2->5&quot ...

  4. 理解Java的封装与接口

    1.封装,即保留有限的外部接口(interface),隐藏具体实施细节. 2.封装在生活中很常见.比如下面是一个充电电筒: 一个用户即使不看说明书,也可以猜到这个电筒的操作: 开关和充电.这个电筒用一 ...

  5. bash 读入文件

    Suppose we have a file contains the following information, termed input_file: A       0 B       1 C ...

  6. 解决outlook无法启动

    当outlook出现上述问题时,修复的方案: 1.在打开的命令提示符窗口中,输入"cd C:\Program Files\Microsoft Office\Office12"然后回 ...

  7. Python编程中常用的12种基础知识总结

    原地址:http://blog.jobbole.com/48541/ Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时 ...

  8. node&period;js之setTimeout&lpar;&rpar;、clearTimeout&lpar;&rpar;与 setInterval&lpar;&rpar;与clearInterval&lpar;&rpar;

    1.setTimeout函数与clearTimeout函数 setTimeout(cb,ms,[arg],[...])延时一定时间执行回调函数该函数中cb参数为必填函数,为需要执行的回调函数ms为经过 ...

  9. react-native-deprecated-custom-components

    速记:从0.44版本开始,Navigator被从react native的核心组件库中剥离到了一个名为react-native-deprecated-custom-components的单独模块中. ...

  10. c&plus;&plus;中sizeof的理解

    1. 例题 #include <iostream> class A {}; class B { char m_data; }; class C { ]; }; class D { char ...