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[];
char *p; p = setlocale(LC_ALL, NULL);
ss[] = _T('中');
ss[] = _T('文');
ss[] = _T('\0');
wprintf(L"%ls\n", ss); printf("地域设置:%s\n", p);

运行结果:

从上面的运行结果可以看出'中' '文'两个字并没有被正确的输出,因为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语言的更多相关文章

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

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

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

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

  3. 【转载】C语言itoa()函数和atoi()函数详解(整数转字符C实现)

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

  4. C语言memset函数详解

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

  5. Netsuite Formula > Oracle函数列表速查(PL/SQL单行函数和组函数详解).txt

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

  6. loadrunner 脚本开发- web_url函数详解

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

  7. 详解 Go 语言中的 time.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. leetcode155

    public class MinStack { Stack<int> S = new Stack<int>(); /** initialize your data struct ...

  2. threading join用法

    join():在子线程完成运行之前,这个子线程的父线程将一直被阻塞 import threading #线程import time def Beijing(n): print('Beijing tim ...

  3. spring boot 日志介绍 以及 logback配置示例

    https://www.cnblogs.com/flying607/p/7827460.html 以下是springboot的一个局部依赖关系: 可以看到,java util logging(jul) ...

  4. 使用appium做自动化测试时,send_keyss只能输入字母数字,无法输入中文

    解决方案: driver中增加以下2行配置: "unicodeKeyboard":True, #unicode编码输入 "resetKeyboard":True ...

  5. RGB颜色值转化为long 型数字

    通常我们表达颜色都是使用RGB值表示的,今天在VB中设置RGB值居然是一个整形数字,网上各种搜资料发现这个数字是怎么来的: 数值= 65536*Blue + 256* Green + Red

  6. vue.js+SSH添加和查询

    Vue.js 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,它不仅易于上手,还便于与第三方库或既有项目整合.另一方面,当与 ...

  7. 性感天才黑客乔治·霍兹George Hotz 17岁打脸乔布斯20岁搞疯索尼

    1.国内外著名黑客信息 1) 国外著名黑客 George Hotz 乔治·霍兹(George Hotz,1989年10月2日-),美国学生,2007年8月解锁苹果(Apple)iPhone手机,使得i ...

  8. ajax请求导致status为canceled(无任何回调数据)的原因

    1.故障现象 一个普通的ajax请求,请求能够到达controller,也能正常处理业务,但是ajax的回调函数为空,即没有任何状态和数据返回,使用谷歌浏览器查看请求状态如下图: 出现该错误:简单来说 ...

  9. MongoDB:索引操作

    首先插入十万个数据 ;i;i++){ var rand = parseInt(i*Math.random()); db.person_test.insert({"name":&qu ...

  10. ORACLE查询内存溢出

    首先我们来看一个带排序的查询,点击工具栏的显示包含实际的执行计划. 1 SELECT * FROM AdventureWorks2008R2.Person.Person WHERE FirstName ...