在 C 中,字符串是 char( char *
) 的数组,字符通常存储在char
. 我注意到来自 libC 的一些函数将作为参数整数而不是字符。
例如,让我们来看看toupper()
两者tolower()
都使用的函数int
。手册页说:
如果 c 不是 unsigned char 值或 EOF,则这些函数的行为是未定义的。
我的猜测是,与 a int
,toupper
并且tolower
能够处理unsigned char
and EOF
。但实际上EOF
是在实践中(关于它的值有什么规则吗?)一个可以与 a 一起存储的值char
,并且由于这些函数不会转换EOF
为其他东西,我想知道为什么toupper
不简单地将 char 作为参数.
无论如何,为什么我们需要接受不是字符的东西(例如 EOF)?有人可以给我一个相关的用例吗?
这与fputc
or类似putchar
,也将 aint
转换为unsigned char
无论如何。
我正在寻找那个选择的确切动机。我想被说服,我不想回答我不知道有一天是否有人问我。