C 库 - iswcntrl() 函数
C wctype 库中的 iswcntrl() 函数用于检查给定的宽字符(类型为 wint_t)是否为控制字符。控制字符是不会打印的字符,而是控制文本处理和输出设备的行为。
控制字符包括换行符 ( )、回车符 ( ) 等字符,以及 ASCII 控制字符代码范围(0x00-0x1F 和 0x7F)内的其他字符,以及任何特定于当前语言环境的控制字符。
其中,0x00-0x1F 是 ASCII 表中的前 32 个字符。 0x7F 是"del"(删除)字符。
语法
以下是 iswcntrl() 函数的 C 库语法 -
int iswcntrl( wint_t ch );
参数
此函数接受单个参数 -
-
ch - 需要检查的是类型为"wint_t"的宽字符。
返回值
如果宽字符是控制字符,则此函数返回非零值,否则返回零。
示例 1
以下是演示 iswcntrl() 函数用法的基本 C 语言示例。
#include <stdio.h>
#include <wctype.h>
#include <wchar.h>
int main() {
// 换行符
wchar_t ch1 = L'
';
// 常规字符
wchar_t ch2 = L'A';
if (iswcntrl(ch1)) {
wprintf(L"'%lc' is a control character.", ch1);
} else {
wprintf(L"'%lc' is not a control character.", ch1);
}
if (iswcntrl(ch2)) {
wprintf(L"'%lc' is a control character.", ch2);
} else {
wprintf(L"'%lc' is not a control character.", ch2);
}
return 0;
}
输出
以下是输出 -
' ' is a control character. 'A' is not a control character.
示例 2
我们创建一个 C 程序,并使用 iswcntrl() 函数检查 Unicode 字符"行分隔符"在默认语言环境中是否为控制字符。
#include <locale.h>
#include <stdio.h>
#include <wchar.h>
#include <wctype.h>
int main(void) {
// 定义 Unicode 字符"行分隔符"
wchar_t ch = L'\u2028';
// 检查并打印该字符在默认语言环境中是否为控制字符
printf("In the default locale, iswcntrl(%#x) = %d", ch, iswcntrl(ch));
return 0;
}
输出
以下是输出 -
In the default locale, iswcntrl(0x2028) = 0
示例 3
以下 C 程序检查默认语言环境和 Unicode 语言环境中的控制字符。
#include <locale.h>
#include <stdio.h>
#include <wchar.h>
#include <wctype.h>
int main (void){
// 包含控制字符和非控制字符的宽字符数组
wchar_t characters[] = { L'
', L' ', L'A', L'\u2028', L'\u00A0' };
size_t num_characters = sizeof (characters) / sizeof (characters[0]);
// 检查并打印每个字符在默认语言环境中是否为控制字符
printf ("Checking characters in the default locale:");
for (size_t i = 0; i < num_characters; ++i) {
wchar_t ch = characters[i];
printf ("Character '%#x' (", ch);
if (iswcntrl (ch)) {
printf ("control character");
} else {
printf ("not a control character");
}
printf (")");
}
// 将语言环境设置为"en_US.utf8"
setlocale (LC_ALL, "en_US.utf8");
// 检查并打印每个字符在 Unicode 语言环境中是否为控制字符
printf ("Checking characters in Unicode locale (en_US.utf8):");
for (size_t i = 0; i < num_characters; ++i) {
wchar_t ch = characters[i];
printf ("Character '%#x' (", ch);
if (iswcntrl (ch)) {
printf ("control character");
} else {
printf ("not a control character");
}
printf (")");
}
return 0;
}
输出
以下是输出 -
Checking characters in the default locale: Character '0xa' (control character) Character '0x9' (control character) Character '0x41' (not a control character) Character '0x2028' (not a control character) Character '0xa0' (not a control character) Checking characters in Unicode locale (en_US.utf8): Character '0xa' (control character) Character '0x9' (control character) Character '0x41' (not a control character) Character '0x2028' (control character) Character '0xa0' (not a control character)

