setlocale()函数详解——C语言
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语言相关推荐
- C语言中get_put函数详解,C语言第五课之getchar函数和putchar函数
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 getchar函数也就是键盘输入函数,这个函数和scanf函数不一样!getchar函数没有scanf函数灵活.下面就给大家介绍下getchar函数的介绍 ...
- webots函数详解 c语言
1.常用头文件 #include <webots/robot.h> #include <stdio.h> #include <webots/motor.h> //控 ...
- c语言malloc用法 数组,详解C语言用malloc函数申请二维动态数组的实例
详解C语言用malloc函数申请二维动态数组的实例 C语言在程序运行中动态的申请及释放内存十分方便,一维数组的申请及释放比较简单. Sample one #include int main() { c ...
- c++ memset 语言_C/C++ 中memset() 函数详解及其作用介绍
memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的: 包含在头文件中,可以用它对一片内存空间逐字节进行初始化: 原型为 : void *memset(void *s, int v, si ...
- 你是真的“C”——详解C语言函数模块知识(上篇)
详解C语言函数模块知识(上篇)
- c语言中快排函数,c语言快排函数详解
c语言快排函数详解 int cmp(const void *a, const void *b) 返回正数就是说 cmp 传入参数第一个要放在第二个后面, 负数就是传入参数第一个要放第二个前面, 如果是 ...
- gets和fgets函数及其区别,C语言gets和fgets函数详解
gets和fgets函数及其区别,C语言gets和fgets函数详解 每当讨论 gets 函数时,大家不由自主地就会想起 1988 年的"互联网蠕虫",它在 UNIX 操作系统的 ...
- 详解c语言main函数、printf函数、scanf函数与va家族
C语言入门与提升(1)--详解c语言main函数.printf函数与scanf函数,与va家族 前言: 为什么要学习C语言呢?C语言作为最古老的语言之一,走过了半个多世纪的风风雨雨,至今仍然长盛不衰, ...
- 【C语言学习笔记】SWAP函数详解
SWAP函数详解 本篇文章通过swap函数来深入了解C语言中函数的用法,与指针的应用.参考资料来源于经典书籍与技术博客的分享. 在复习完生存期相关的知识点后(详情可转至此处),初步认识了函数与本地变量 ...
- puts和fputs函数及其区别,C语言puts和fputs函数详解
puts和fputs函数及其区别,C语言puts和fputs函数详解 与 gets 函数一样,对于 puts 函数,同样建议使用 fputs 函数来代替 puts 函数.如下面的示例代码所示: int ...
最新文章
- protobuf的ParseFromArray 解析失败的问题
- ubuntu交叉编译x264报错:‘X264_VERSION’ undeclared(已解决)运行version.sh
- java类成员初始化_简单了解Java类成员初始化顺序
- LeetCode 45. 跳跃游戏 II(贪心/BFS,难)
- 玩具谜题(洛谷-P1563)
- SQL必知必会-更新和删除数据
- U-Boot>WebHome翻译
- Bootstrap-Table事件和方法
- 设计模式-工厂模式(二)
- Linux网络服务之DHCP
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-1.数据信息安全--微信授权一键登录功能介绍...
- 软件开发管理:管开发如治军
- Delphi TStringList DBRichEdit 删除尾部多余换页符
- tzoj 3847 Mowing the Lawn (单调队列 )
- PayPal支付集成到自己Web网站
- Python正则表达式中的r
- cosx绝对值的积分
- iOS中ImageIO框架详解与应用分析
- 目标跟踪 | 3D目标跟踪高级入门!
- SourceInsight绿色版下载使用
热门文章
- kubeedge v1.1.0部署指南
- 基于Edge插件+格式工厂下载B站上的喜欢视频
- 浏览器大全推荐丨这26款浏览器你用过几个?
- 计算机坏处英语,玩电脑的危害英语作文,沉迷电脑的危害英语作文!
- 微信公众号网页登录开发测试步骤详解
- 人均GDP将破1万美元对中国意味着什么?
- 阿里云首席安全科学家吴翰清的思考:弹性安全网络,构建下一代安全的互联网...
- java128分解质因数_java分解质因数
- 如何在ppt中打开html,如何在ppt中直接打开网页
- 继电器----D型触发器,边沿触发器,累加器