setlocale函数

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

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

第一个参数category:

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

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

第二个参数locale:

用来设置地域设置的名称(字符串),也就是设置为哪种地域,对于不同的平台和不同的编译器,地域设置的名称可能会不同,C语言标准没有干预太多。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);

运行结果:

从上面可以看出当前编译器使用的地域设置是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);

运行结果:

因为操作系统是中文环境,所以上面的代码中可以改为效果是一样的

转载于:https://www.cnblogs.com/lanhaicode/p/10659763.html

setlocale()函数详解——C语言相关推荐

  1. C语言中get_put函数详解,C语言第五课之getchar函数和putchar函数

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 getchar函数也就是键盘输入函数,这个函数和scanf函数不一样!getchar函数没有scanf函数灵活.下面就给大家介绍下getchar函数的介绍 ...

  2. webots函数详解 c语言

    1.常用头文件 #include <webots/robot.h> #include <stdio.h> #include <webots/motor.h> //控 ...

  3. c语言malloc用法 数组,详解C语言用malloc函数申请二维动态数组的实例

    详解C语言用malloc函数申请二维动态数组的实例 C语言在程序运行中动态的申请及释放内存十分方便,一维数组的申请及释放比较简单. Sample one #include int main() { c ...

  4. c++ memset 语言_C/C++ 中memset() 函数详解及其作用介绍

    memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的: 包含在头文件中,可以用它对一片内存空间逐字节进行初始化: 原型为 : void *memset(void *s, int v, si ...

  5. 你是真的“C”——详解C语言函数模块知识(上篇)

    详解C语言函数模块知识(上篇)

  6. c语言中快排函数,c语言快排函数详解

    c语言快排函数详解 int cmp(const void *a, const void *b) 返回正数就是说 cmp 传入参数第一个要放在第二个后面, 负数就是传入参数第一个要放第二个前面, 如果是 ...

  7. gets和fgets函数及其区别,C语言gets和fgets函数详解

    gets和fgets函数及其区别,C语言gets和fgets函数详解 每当讨论 gets 函数时,大家不由自主地就会想起 1988 年的"互联网蠕虫",它在 UNIX 操作系统的 ...

  8. 详解c语言main函数、printf函数、scanf函数与va家族

    C语言入门与提升(1)--详解c语言main函数.printf函数与scanf函数,与va家族 前言: 为什么要学习C语言呢?C语言作为最古老的语言之一,走过了半个多世纪的风风雨雨,至今仍然长盛不衰, ...

  9. 【C语言学习笔记】SWAP函数详解

    SWAP函数详解 本篇文章通过swap函数来深入了解C语言中函数的用法,与指针的应用.参考资料来源于经典书籍与技术博客的分享. 在复习完生存期相关的知识点后(详情可转至此处),初步认识了函数与本地变量 ...

  10. puts和fputs函数及其区别,C语言puts和fputs函数详解

    puts和fputs函数及其区别,C语言puts和fputs函数详解 与 gets 函数一样,对于 puts 函数,同样建议使用 fputs 函数来代替 puts 函数.如下面的示例代码所示: int ...

最新文章

  1. protobuf的ParseFromArray 解析失败的问题
  2. ubuntu交叉编译x264报错:‘X264_VERSION’ undeclared(已解决)运行version.sh
  3. java类成员初始化_简单了解Java类成员初始化顺序
  4. LeetCode 45. 跳跃游戏 II(贪心/BFS,难)
  5. 玩具谜题(洛谷-P1563)
  6. SQL必知必会-更新和删除数据
  7. U-Boot>WebHome翻译
  8. Bootstrap-Table事件和方法
  9. 设计模式-工厂模式(二)
  10. Linux网络服务之DHCP
  11. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-1.数据信息安全--微信授权一键登录功能介绍...
  12. 软件开发管理:管开发如治军
  13. Delphi TStringList DBRichEdit 删除尾部多余换页符
  14. tzoj 3847 Mowing the Lawn (单调队列 )
  15. PayPal支付集成到自己Web网站
  16. Python正则表达式中的r
  17. cosx绝对值的积分
  18. iOS中ImageIO框架详解与应用分析
  19. 目标跟踪 | 3D目标跟踪高级入门!
  20. SourceInsight绿色版下载使用

热门文章

  1. kubeedge v1.1.0部署指南
  2. 基于Edge插件+格式工厂下载B站上的喜欢视频
  3. 浏览器大全推荐丨这26款浏览器你用过几个?
  4. 计算机坏处英语,玩电脑的危害英语作文,沉迷电脑的危害英语作文!
  5. 微信公众号网页登录开发测试步骤详解
  6. 人均GDP将破1万美元对中国意味着什么?
  7. 阿里云首席安全科学家吴翰清的思考:弹性安全网络,构建下一代安全的互联网...
  8. java128分解质因数_java分解质因数
  9. 如何在ppt中打开html,如何在ppt中直接打开网页
  10. 继电器----D型触发器,边沿触发器,累加器