6

谁能解释为什么如果为真则isdigit返回2048?我是ctype.h图书馆的新手。

#include <stdio.h>
#include <ctype.h>
int main() {
  char c = '9';
  printf ("%d", isdigit(c));
  return 0;
}
4

2 回答 2

24

因为这是允许的。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 ...
于 2013-06-30T15:22:14.897 回答
0

因为没有标准文档来定义如何用指定的数字表示布尔值,而对于 C 语言,非零为真,零为假。所以这取决于实际的实现。

于 2013-08-29T01:36:51.030 回答