谁能解释为什么如果为真则isdigit
返回2048
?我是ctype.h
图书馆的新手。
#include <stdio.h>
#include <ctype.h>
int main() {
char c = '9';
printf ("%d", isdigit(c));
return 0;
}
因为这是允许的。C99 标准仅对 , 等进行了isdigit
说明isalpha
:
当且仅当参数的值符合函数描述中的值时,本子条款中的函数才返回非零 (true) 。
c
至于为什么在实践中会发生这种情况,我不确定。猜测一下,它使用与所有函数共享的查找表is*
,并屏蔽除特定位位置之外的所有位置。例如:
static const int table[256] = { ... };
// ... etc ...
int isalpha(char c) { return table[c] & 1024; }
int isdigit(char c) { return table[c] & 2048; }
// ... etc ...
因为没有标准文档来定义如何用指定的数字表示布尔值,而对于 C 语言,非零为真,零为假。所以这取决于实际的实现。