

函数声明 | 函数功能 |
|---|---|
| 用于将一个长字符串拆分成几个短字符串(标记),并返回第一个标记的地址 |
| 用于将一个长字符串拆分成几个短字符串(标记),并返回第一个标记的地址 |
| 用于将字符串转换为长整型数字的函数 |
| 用于将字符串转换为无符号长整型数字 |
| 将一个 |
| 用于确定给定的宽字符类别 |
| 用于将给定的宽字符转换为其对应的字节表示 |
| 用于将给定的宽字符转换为其对应的多字节字符表示 |
| 用于在宽字符数组中查找给定的宽字符 |
| 用于比较两个宽字符数组的前 n 个宽字符 |
| 用于将一个宽字符数组的前 n 个宽字符复制到另一个宽字符数组 |
| 用于将一个宽字符数组的前 n 个宽字符设置为给定的宽字符值 |
| 用于格式化输出宽字符字符串 |
| 用于将数据写入文件描述符 |
| 用于从标准输入流(stdin)读取格式化的宽字符输入 |
函数声明 | 函数功能 |
|---|---|
| 用于将一个长字符串拆分成几个短字符串(标记),并返回第一个标记的地址 |
| 用于将一个长字符串拆分成几个短字符串(标记),并返回第一个标记的地址 |

参数:
NULLwindows 下两个参数的示例:
#include <wchar.h>
#include <stdio.h>
int main() {
wchar_t str[] = L"Hello, huazie! This is wcstok demo.";
wchar_t* token;
// 第一次调用
token = wcstok(str, L" ,.!?");
while (token != NULL)
{
wprintf(L"%ls\n", token);
token = wcstok(NULL, L" ,.!?");
}
return 0;
}
函数声明 | 函数功能 |
|---|---|
| 用于将字符串转换为长整型数字的函数 |
参数:
2 和 36 之间;
当 base 参数为 0 时,wcstol() 函数会自动检测数字基数:"0x" 或 "0X" 开头,则将基数设置为 16。"0" 开头,则将基数设置为 8。10。#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
int main()
{
//const wchar_t* str = L"123456";
//const wchar_t* str = L"123a456";
//const wchar_t* str = L"a123456";
const wchar_t* str = L"0xFF";
wchar_t* endptr;
long int num;
//num = wcstol(str, &endptr, 10);
num = wcstol(str, &endptr, 0);
if (endptr == str)
printf("Invalid input.\n");
else
printf("The number is %ld\n", num);
return 0;
}注意: 如果输入字符串无法转换为数字,则 wcstol() 函数返回 0,并将 endptr 指向输入字符串的起始位置。所以,在使用 wcstol() 函数时,建议检查 endptr 和 str 是否相同,以确定输入是否有效。




函数声明 | 函数功能 |
|---|---|
| 用于将字符串转换为无符号长整型数字 |
参数:
2 和 36 之间;
当 base 参数为 0 时,wcstol() 函数会自动检测数字基数:"0x" 或 "0X" 开头,则将基数设置为 16。"0" 开头,则将基数设置为 8。10。#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
int main()
{
const wchar_t* str = L"123a456";
wchar_t* endptr;
unsigned long int num;
num = wcstoul(str, &endptr, 10);
if (endptr == str)
printf("Invalid input.\n");
else
printf("The number is %lu\n", num);
return 0;
}wcstoul() 函数的用法和 wcstol() 函数类似,这里就不一一列举了

函数声明 | 函数功能 |
|---|---|
| 将一个 |
参数:
#include <stdlib.h>
#include <stdio.h>
#include <wchar.h>
#define ARRAY_SIZE 5
int main()
{
const wchar_t* arr[ARRAY_SIZE] = { L"Tom", L"Alice", L"Huazie", L"David", L"Charlie" };
wchar_t sorted_arr[ARRAY_SIZE][50];
size_t i;
for (i = 0; i < ARRAY_SIZE; i++)
{
wcsxfrm(sorted_arr[i], arr[i], sizeof(sorted_arr[i]));
}
// 使用 qsort 对字符串数组排序
qsort(sorted_arr, ARRAY_SIZE, sizeof(sorted_arr[0]), wcscmp);
// 排序后输出
wprintf(L"Sorted array:\n");
for (i = 0; i < ARRAY_SIZE; i++)
{
wprintf(L"%ls\n", sorted_arr[i]);
}
return 0;
}在上面的示例代码中,
5 个 Unicode 字符串的字符串数组 arr,每个字符串代表一个人名;5x50 的二维字符数组 sorted_arr,用于存储排序后的字符串;wcsxfrm() 函数将每个 Unicode 字符串转换为可排序字符串,并将结果存储在 sorted_arr 数组中;qsort() 函数按字典序对 sorted_arr 数组中的字符串进行排序;wprintf() 函数输出排序后的字符串;
函数声明 | 函数功能 |
|---|---|
| 用于确定给定的宽字符类别 |
参数:
常见的宽字符属性及含义如下:
属性名称 | 含义 |
|---|---|
| 字母数字字符 |
| 字母字符 |
| 空格或水平制表符字符 |
| 控制字符 |
| 数字字符 |
| 可打印字符(除空格字符外) |
| 小写字母字符 |
| 可打印字符 |
| 标点符号字符 |
| 空白字符 |
| 大写字母字符 |
| 十六进制数字字符 |
返回值:
#include <stdio.h>
#include <wchar.h>
#include <wctype.h>
int main()
{
wchar_t ch = L',';
wctype_t punct_wt;
// 获取标点符号字符类型
punct_wt = wctype("punct");
// 判断指定的宽字符是否为标点符号
if (iswctype(ch, punct_wt)) {
wprintf(L"%lc is a punctuation character.\n", ch);
} else {
wprintf(L"%lc is not a punctuation character.\n", ch);
}
return 0;
}注意: 在调用 wctype() 函数时,应该传递一个有效的宽字符属性名称作为参数,详见 5.1 的表格所示。

函数声明 | 函数功能 |
|---|---|
| 用于将给定的宽字符转换为其对应的字节表示 |
参数:
返回值:
EOF。#include <stdio.h>
#include <wchar.h>
int main()
{
wchar_t ch = L'?';
int byte;
// 将 Unicode 字符转换为字节表示
byte = wctob(ch);
// 输出字节值
printf("Byte value of %lc: %d (0x%02X)\n", ch, byte, byte);
return 0;
}注意: 在使用 wctob() 函数时,应该确保系统当前的本地化环境和编码方式与程序中使用的字符编码一致。如果字符编码不一致,可能会导致错误的结果或未定义行为。

函数声明 | 函数功能 |
|---|---|
| 用于将给定的宽字符转换为其对应的多字节字符表示 |
参数:
返回值:
wc 转换为其对应的多字节字符表示,存储在 s 指向的字符数组中;s 是空指针,则不执行任何操作,只返回转换所需的字符数;-1。#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
int main()
{
wchar_t ch = L'?';
char mb[MB_CUR_MAX];
int len;
// 将 Unicode 字符转换为多字节字符表示
len = wctomb(mb, ch);
// 输出转换结果
if (len >= 0)
{
printf("Multibyte representation of %lc: ", ch);
for (int i = 0; i < len; i++) {
printf("%02X ", (unsigned char) mb[i]);
}
printf("\n");
}
else
{
printf("Failed to convert %lc to multibyte character.\n", ch);
}
return 0;
}在上面的示例程序中,wctomb() 函数被用来将 Unicode 字符 ',' 转换为其对应的多字节字符表示,并将结果保存在字符数组 mb 中。然后,程序输出每个字节的十六进制值。
注意: 在使用 wctomb() 函数时,应该根据当前的本地化环境和编码方式调整字符数组的大小。可以使用 MB_CUR_MAX 宏来获取当前编码方式下一个多字节字符所需的最大字节数,从而确定字符数组的大小。

函数声明 | 函数功能 |
|---|---|
| 用于在宽字符数组中查找给定的宽字符 |
参数:
返回值:
c,则返回指向该位置的指针;#include <stdio.h>
#include <wchar.h>
int main()
{
const wchar_t str[] = L"Hello, Huazie!";
const wchar_t ch = L'u';
wchar_t* pch;
// 在宽字符数组中查找给定的宽字符
// 使用 wcslen() 函数来获取 str 的长度,以指定要搜索的字节数 n
pch = wmemchr(str, ch, wcslen(str));
// 根据 pch,来判断是否找到,并输出结果
if (pch)
wprintf(L"Found '%lc' at position %d.\n", ch, (int)(pch - str));
else
wprintf(L"Could not find '%lc'.\n", ch);
return 0;
}
函数声明 | 函数功能 |
|---|---|
| 用于比较两个宽字符数组的前 n 个宽字符 |
参数:
返回值:
s1 比 s2 小,则返回负数;s1 比 s2 大,则返回正数。#include <stdio.h>
#include <wchar.h>
int main()
{
const wchar_t str1[] = L"Hello";
const wchar_t str2[] = L"Huazie";
int result;
// 比较两个宽字符数组
result = wmemcmp(str1, str2, wcslen(str1));
// 根据result,来判断,并输出结果
if (result == 0)
wprintf(L"%ls and %ls are equal.\n", str1, str2);
else if (result < 0)
wprintf(L"%ls is less than %ls.\n", str1, str2);
else
wprintf(L"%ls is greater than %ls.\n", str1, str2);
return 0;
}
函数声明 | 函数功能 |
|---|---|
| 用于将一个宽字符数组的前 n 个宽字符复制到另一个宽字符数组 |
参数:
#include <stdio.h>
#include <wchar.h>
#include <string.h>
int main()
{
const wchar_t src[] = L"Hello, Huazie!";
wchar_t dest[20];
// 将一个宽字符数组复制到另一个宽字符数组
wmemcpy(dest, src, wcslen(src) + 1);
// 输出结果
wprintf(L"Source string: %ls\n", src);
wprintf(L"Destination string: %ls\n", dest);
return 0;
}注意: 在使用 wmemcpy() 函数时,应该确保目标数组有足够的空间来存储源数组的内容,以免发生缓冲区溢出。在上面的示例中,我们使用 wcslen() 函数来获取源数组的长度,然后加上 1,以包括字符串结尾的空字符 '\0'。

函数声明 | 函数功能 |
|---|---|
| 用于将一个宽字符数组的前 n 个宽字符设置为给定的宽字符值 |
参数:
#include <stdio.h>
#include <wchar.h>
#include <string.h>
int main()
{
wchar_t str[20]= L"Hello Huazie!";
// 修改前
wprintf(L"Before: %ls\n", str);
// 将一个宽字符数组的所有元素设置为给定的宽字符值X
wmemset(str, L'X', wcslen(str));
// 修改后
wprintf(L"After : %ls\n", str);
return 0;
}在上面的示例程序中,
"Hello Huazie!";wprintf() 函数输出修改之前的宽字符数组 str;wmemset() 函数将宽字符数组 str 的所有元素都设置为 ‘X’;wprintf() 函数输出修改之后的宽字符数组 str,并结束程序。
函数声明 | 函数功能 |
|---|---|
| 用于格式化输出宽字符字符串 |
参数:
#include <stdio.h>
#include <wchar.h>
int main()
{
wchar_t name[] = L"Huazie";
int age = 25;
double height = 1.75;
// 输出格式化的宽字符字符串
wprintf(L"%ls %d %.2f\n", name, age, height);
return 0;
}
函数声明 | 函数功能 |
|---|---|
| 用于将数据写入文件描述符 |
参数:
返回值:
-1。#include <stdio.h>
#include <unistd.h>
int main()
{
const char msg[] = "Hello, Huazie!\n";
int nbytes;
// 向标准输出流写入数据
nbytes = write(STDOUT_FILENO, msg, sizeof(msg) - 1);
// 输出结果
if (nbytes == -1)
{
perror("write");
return 1;
}
return 0;
}注意: 在使用 write() 函数时,应该确保给定的文件描述符是有效的,并且缓冲区中有足够的数据可供写入,以免发生未定义的行为

函数声明 | 函数功能 |
|---|---|
| 用于从标准输入流(stdin)读取格式化的宽字符输入 |
参数:
#include <stdio.h>
#include <wchar.h>
int main()
{
wchar_t name[20];
int age;
// 从标准输入流读取格式化的宽字符输入
wprintf(L"Please nput your name and age: ");
wscanf(L"%ls %d", name, &age);
// 输出结果
wprintf(L"name: %ls age: %d\n", name, age);
return 0;
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。