跳转到内容

C 编程/wchar.h

来自维基教科书,开放的书籍,为开放的世界

wchar.hC 标准库 中的一个头文件。它是 1995 年对 C 编程语言标准扩展的一部分。它包含扩展的多字节和宽字符实用程序。标准头文件 <wchar.h> 包含在对宽流执行输入和输出操作时。它也可以用来操作宽字符串。[1]

宽字符

[编辑 | 编辑源代码]

C 是一种编程语言,它是在 7 位 ASCII 码为主流字符集的环境中开发的。因此,从那时起,8 位字节就成为最常见的编码单位。但是,当为国际目的开发软件时,它必须能够表示不同的字符。例如,应该提供用于表示印度语、汉语、日语书写系统的字符编码方案。通过使用仅仅是统一字节数的字符,可以消除处理这种不同多字节字符的不便。ANSI C 提供了一种类型,允许将可变宽度字符作为称为宽字符的统一大小的数据对象进行操作。宽字符集是已存在字符集的超集,包括 7 位 ASCII。[2]

声明和定义

[编辑 | 编辑源代码]

标准头文件 wchar.h 包含一些常量的定义或声明。

NULL
它是一个空指针常量。它永远不会指向一个真实的对象。
WCHAR_MIN
它表示 wchar_t 类型下限或最小值。
WCHAR_MAX
它表示 wchar_t 类型上限或最大值。
WEOF
它定义了 wint_t 类型的返回值,但该值不对应于扩展字符集中的任何成员。WEOF 表示字符流的结尾、文件结尾 (EOF) 或错误情况。[3]

数据类型

[编辑 | 编辑源代码]
mbstate_t
mbstate_t 类型的变量包含从一个函数调用到另一个函数调用所需的关于转换状态的所有信息。
size_t
它是一个大小/计数类型,存储 sizeof 运算符的结果或返回值。
wchar_t
wchar_t 类型的对象可以保存一个宽字符。它也用于声明或引用宽字符和宽字符串。
wint_t
此类型是一个整数类型,可以保存与扩展字符集成员相对应的任何值。它可以保存 wchar_t 类型的全部值以及宏 WEOF 的值。此类型不受整数提升的影响。

宽字符字符串函数

[编辑 | 编辑源代码]
名称 注释
wchar_t *wcscat(wchar_t *s1, const wchar_t *s2); 将 s2 指向的宽字符串复制到 s1 指向的宽字符串的末尾。
wchar_t *wcschr(const wchar_t *s, wchar_t c); 在宽字符串 s 中搜索宽字符 c。
int wcscmp(const wchar_t *s1, const wchar_t *s2); 比较 s1 和 s2 指向的两个宽字符串。
int wcscoll(const wchar_t *s1, const wchar_t *s2); 使用当前区域设置的整理顺序比较两个宽字符串 s1 和 s2。
size_t wcscspn(const wchar_t *s1, const wchar_t *s2); 返回 s1 的最大初始段的长度,该段完全由不来自 s2 的代码组成。
wchar_t *wcscpy(wchar_t *s1, const wchar_t s2); 将 s2 指向的宽字符串复制到 s1 指向的位置。
size_t wcslen(const wchar_t *s); 返回 s 指向的宽字符串中宽字符的数量(不包括终止空宽字符)。
wchar_t *wcspbrk(const wchar_t *s1, const wchar_t *s2); 搜索 s1 中第一个与 s2 中的任何一个元素相等的元素。
size_t wcsspn(const wchar_t *s1, const wchar_t *s2); 返回 s1 的最大初始段的长度,该段完全由来自 s2 的代码组成。

宽字符数组函数

[编辑 | 编辑源代码]
名称 注释
wchar_t *wmemchr(const wchar_t *s, wchar_t c, size_t n); 搜索 s 指向的、大小为 n 的数组中的第一个等于 c 的元素。
int wmemcmp(const wchar_t *s1, const wchar_t *s2, size_t n); 比较 s1 和 s2 指向的两个数组中的连续元素,直到找到不相等的元素。
wchar_t *wmemcpy(wchar_t *s1, const wchar_t *s2, size_t n); 将 s2 指向的数组中的 n 个宽字符复制到 s1 指向的数组中的宽字符。如果 s1 和 s2 中的对象重叠,则行为未定义。
wchar *wmemmove(wchar_t *s1, const wchar_t *s2, size_t n); 即使数组 s1 和 s2 中的对象重叠,也像 wmemcpy 函数一样工作。
wchar_t *wmemset(wchar_t *s, wchar_t c, size_t n) 将 s 指向的数组中的前 n 个元素设置为宽字符 c。

[4]

转换函数

[编辑 | 编辑源代码]
名称 注释
wint_t btowc(int c); 将 c 转换为等效的宽字符后返回结果,如果发生错误则返回 WEOF。
int wctob(wint_t c); 返回 c 的一个字节或多字节等效项,如果发生错误则返回 WEOF。

宽字符 I/O 函数

[编辑 | 编辑源代码]
名称 注释
wint_t fgetwc(FILE *stream); 从文件读取一个宽字符。
wchar_t *fgetws(wchar_t *s, int n, FILE *stream); 从文件读取一个宽字符字符串。
wint_t fputwc(wchar_t *c, FILE *stream); 将一个宽字符写入文件。
int fputws(const wchar_t *s, FILE *stream); 将一个宽字符串写入文件。
int fwprintf(FILE *stream, const wchar_t format,...); 首先生成格式化的文本,然后将其写入文件。
int fwscanf(FILE *stream, const wchar_t format,...); 从文件读取格式化的文本。
wint_t getwc(FILE*stream); 从文件读取一个宽字符。
wint_t getwchar() 从 stdin 读取宽字符。
wint_t putwc(wchar_t c, FILE *stream); 将一个宽字符写入文件。
wint_t putwchar(wchar_t c); 将宽字符写入 stdout。
华夏公益教科书