比如求宽字符串长度的函数是 
size_t __cdel wchlen(const wchar_t*); 
  为什么要专门定义这些函数呢?最根本的原因是,ANSI下的字符串都是以’\0’来标识字符串尾的(Unicode字符串以“\0\0”结束),许多字符串函数的正确操作均是以此为基础进行。而我们知道,在宽字符的情况下,一个字符在内存中要占据一个字的空间,这就会使操作ANSI字符的字符串函数无法正确操作。以”Hello”字符串为例,在宽字符下,它的五个字符是: 
0x0048 0x0065 0x006c 0x006c 0x006f 
在内存中,实际的排列是:

48 00 65 00 6c 00 6c 00 6f 00 
  于是,ANSI字符串函数,如strlen,在碰到第一个48后的00时,就会认为字符串到尾了,用strlen对宽字符串求长度的结果就永远会是1!

--------------------------------------------------------

宽字符处理函数函数与普通函数对照表

字符分类: 宽字符函数普通C函数描述 
iswalnum() isalnum() 测试字符是否为数字或字母 
iswalpha() isalpha() 测试字符是否是字母 
iswcntrl() iscntrl() 测试字符是否是控制符 
iswdigit() isdigit() 测试字符是否为数字 
iswgraph() isgraph() 测试字符是否是可见字符 
iswlower() islower() 测试字符是否是小写字符 
iswprint() isprint() 测试字符是否是可打印字符 
iswpunct() ispunct() 测试字符是否是标点符号 
iswspace() isspace() 测试字符是否是空白符号 
iswupper() isupper() 测试字符是否是大写字符 
iswxdigit() isxdigit()测试字符是否是十六进制的数字

大小写转换: 
宽字符函数普通C函数描述 
towlower() tolower() 把字符转换为小写 
towupper() toupper() 把字符转换为大写

字符比较: 宽字符函数普通C函数描述 
wcscoll() strcoll() 比较字符串

日期和时间转换: 
宽字符函数描述 
strftime() 根据指定的字符串格式和locale设置格式化日期和时间 
wcsftime() 根据指定的字符串格式和locale设置格式化日期和时间, 并返回宽字符串 
strptime() 根据指定格式把字符串转换为时间值, 是strftime的反过程

打印和扫描字符串: 
宽字符函数描述 
fprintf()/fwprintf() 使用vararg参量的格式化输出 
fscanf()/fwscanf() 格式化读入 
printf() 使用vararg参量的格式化输出到标准输出 
scanf() 从标准输入的格式化读入 
sprintf()/swprintf() 根据vararg参量表格式化成字符串 
sscanf() 以字符串作格式化读入 
vfprintf()/vfwprintf() 使用stdarg参量表格式化输出到文件 
vprintf() 使用stdarg参量表格式化输出到标准输出 
vsprintf()/vswprintf() 格式化stdarg参量表并写到字符串

数字转换: 
宽字符函数普通C函数描述 
wcstod() strtod()   把宽字符的初始部分转换为双精度浮点数 
wcstol() strtol()   把宽字符的初始部分转换为长整数 
wcstoul() strtoul() 把宽字符的初始部分转换为无符号长整数

多字节字符和宽字符转换及操作: 
宽字符函数描述 
mblen() 根据locale的设置确定字符的字节数 
mbstowcs() 把多字节字符串转换为宽字符串 
mbtowc()/btowc()把多字节字符转换为宽字符 
wcstombs() 把宽字符串转换为多字节字符串 
wctomb()/wctob() 把宽字符转换为多字节字符

输入和输出: 
宽字符函数普通C函数描述 
fgetwc() fgetc() 从流中读入一个字符并转换为宽字符 
fgetws() fgets() 从流中读入一个字符串并转换为宽字符串 
fputwc() fputc() 把宽字符转换为多字节字符并且输出到标准输出 
fputws() fputs() 把宽字符串转换为多字节字符并且输出到标准输出串 
getwc() getc() 从标准输入中读取字符, 并且转换为宽字符 
getwchar() getchar() 从标准输入中读取字符, 并且转换为宽字符 
None gets() 使用fgetws() 
putwc() putc() 把宽字符转换成多字节字符并且写到标准输出 
putwchar() putchar() 把宽字符转换成多字节字符并且写到标准输出 
None puts() 使用fputws() 
ungetwc() ungetc() 把一个宽字符放回到输入流中

字符串操作: 
宽字符函数普通C函数描述 
wcscat() strcat() 把一个字符串接到另一个字符串的尾部 
wcsncat() strncat() 类似于wcscat(), 而且指定粘接字符串的粘接长度. 
wcschr() strchr() 查找子字符串的第一个位置 
wcsrchr() strrchr() 从尾部开始查找子字符串出现的第一个位置 
wcspbrk() strpbrk() 从一字符字符串中查找另一字符串中任何一个字符第一次出现的位置 
wcswcs()/wcsstr() strchr() 在一字符串中查找另一字符串第一次出现的位置 
wcscspn() strcspn() 返回不包含第二个字符串的的初始数目 
wcsspn() strspn() 返回包含第二个字符串的初始数目 
wcscpy() strcpy() 拷贝字符串 
wcsncpy() strncpy() 类似于wcscpy(), 同时指定拷贝的数目 
wcscmp() strcmp() 比较两个宽字符串 
wcsncmp() strncmp() 类似于wcscmp(), 还要指定比较字符字符串的数目 
wcslen() strlen() 获得宽字符串的数目 
wcstok() strtok() 根据标示符把宽字符串分解成一系列字符串 
wcswidth() None 获得宽字符串的宽度 
wcwidth() None 获得宽字符的宽度

另外还有对应于memory操作的 wmemcpy(), wmemchr(), wmemcmp(), wmemmove(), wmemset().

wchar_t的使用相关推荐

  1. c语言char转wchar t,c语言char和wchar_t 转换

    最近遇到一个在C语言当中处理中文的问题,因为汉字和ascii不同,汉字是多字节编码方式,ascii只用一个字节表示,所以在用c语言提供的strlen函数得到的长度是字节长度; 以下都是utf-8编码方 ...

  2. 拼接多个 wchar_t *

    /* wcscat example */ #include <wchar.h> int main () { wchar_t wcs[80]; wcscpy (wcs,L"thes ...

  3. linux wchar t char,linux 下 Linux 下char转换为wchar_t

    LInux下使用mbstowcs函数可以将char转化为wchar_t 函数含义:convert a multibyte string to a wide char string 说明:        ...

  4. windows下wchar_t* 转char*

    这个在windows下很常见,常用,留个档. 一般用这个函数: size_t wcstombs(char *mbstr,const wchar_t *wcstr,size_t count ); mbs ...

  5. TCHAR char wchar_t PTSTR PCSTR printf() wprintf()——_tprintf()解析

    TCHAR char wchar_t PTSTR PCSTR printf() _tprintf() 晕菜了吧? 转来一篇文章为大家解惑... Petzold的Programming Windows的 ...

  6. 刨根问底:C++中宽字符类型(wchar_t)的编码一定是Unicode?长度一定是16位?

    转发的:https://www.ituring.com.cn/article/111027的文章 刨根问底:C++中宽字符类型(wchar_t)的编码一定是Unicode?长度一定是16位? cons ...

  7. wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString....转换

    wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString.... #include <strin ...

  8. PInvoke复习之深入理解char*与wchar_t*与string以及wstring之间的相互转换

    本篇文章是对c++中的char*与wchar_t*与string以及wstring之间的相互转换进行了详细的分析介绍,需要的朋友参考下 #ifndef USE_H_ #define USE_H_ #i ...

  9. c++ 字符类型总结区别wchar_t,char,WCHAR(转)

    1.区别wchar_t,char,WCHAR ANSI:即 char,可用字符串处理函数:strcat( ),strcpy( ), strlen( )等以str打头的函数.    UNICODE:wc ...

  10. C++ 宽字符(wchar_t)与窄字符(char)的转换

    了解 长度 宽字符wchar_t的长度16位,可以用来显示中文等除英文外的其他文字, 窄字符    char   的长度  8 位,只能处理英文. 哪里可以见到 在VS2010, 2012, 2013 ...

最新文章

  1. 【第一组】第十次冲刺例会纪要
  2. thread.sleep是让哪个线程休眠_java开发两年,这些线程知识你都不知道,你怎么涨薪?...
  3. java短除法获取二进制_Java十四天零基础入门-Java的数据类型介绍
  4. [弹性力学]应力转轴公式和应变转轴公式的展开式
  5. Java 算法 阿尔法乘积
  6. 开发提效小技巧分享(一)
  7. 返回值由hresult变为void型_java高级之泛型
  8. 达达开放平台php,达达开放平台对接
  9. python读取lmdb文件_LMDB文件读取器
  10. 计算机和网络邻居都不见 了,网上邻居看不到自己和别人电脑怎么办
  11. 计算机械效率的公式四种,初级中学物理计算公式定律整编汇总.doc
  12. 阿里巴巴的愿景,使命和价值观
  13. 英文演讲稿(3-5分钟)
  14. python背包问题求最大价值 | 动态规划
  15. spring boot校园二手销售网站 毕业设计源码161417
  16. matlab日常(2)
  17. MONGODB 开发架构设计与模型设计
  18. python生日祝福短信_python-定时发送生日邮件祝福
  19. 2021河南省ICPC省赛总结
  20. JAVA语言实现计算器小项目(与Windows附件自带计算器的标准版功能、界面相仿)

热门文章

  1. 查看Linux内核修改及更新记录方法
  2. JS判断字符是否为数字类型
  3. 虚拟机权限不足,无法访问文件
  4. VMware启动虚拟机一直处于黑屏
  5. python PIL增强或降低图像对比度
  6. shell 常用工具指令
  7. 牛客网 哈夫曼树 (大根堆、哈夫曼树)
  8. requestAnimationFrame运动框架实现播放中连续变速动画效果
  9. c++之getopt函数的使用
  10. 无驱、代码自动植入:新一代软件保护锁——圣天诺LDK-HL