gpt4 book ai didi

c - isalpha() 给出断言

转载 作者:太空狗 更新时间:2023-10-29 16:51:55 26 4
gpt4 key购买 nike

我有一个 C 代码,其中我在 ctype.h 中使用标准库函数 isalpha(),这是在 Visual Studio 2010-Windows 上。在下面的代码中,如果 char c 是 '£',则 isalpha 调用返回一个断言,如下面的快照所示:

enter image description here

char c='£';

if(isalpha(c))
{
printf ("character %c is alphabetic\n",c);

}
else
{
printf ("character %c is NOT alphabetic\n",c);
}

我可以看出这可能是因为 8 位 ASCII 没有这个字符。

那么我该如何处理 ASCII 表之外的此类非 ASCII 字符呢?

我想做的是,如果找到任何非字母字符(即使它包含不在 8 位 ASCII 表中的此类字符),我希望能够忽略它。

最佳答案

您可能希望转换发送到 isalpha 的值(以及在 <ctype.h> 中声明的其他函数)到 unsigned char

isalpha((unsigned char)value)

这是在 C 语言中适合强制转换的(并非如此)少数情况之一。


编辑以添加解释。

根据 the standard , 重点是我的

7.4

1 The header <ctype.h> declares several functions useful for classifying and mapping characters. In all cases the argument is an int, the value of which shall be representable as an unsigned char or shall equal the value of the macro EOF. If the argument has any other value, the behavior is undefined.

投向unsigned char确保调用 isalpha()不会调用未定义的行为。

关于c - isalpha() 给出断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6693654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com