跳转到内容

C 编程/wchar.h

来自 Wikibooks,开放的书籍,为一个开放的世界

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。

参考文献

[编辑 | 编辑源代码]
华夏公益教科书