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