Tag: tolower

为什么putchar,toupper,tolower等采用int而不是char?

在C中,字符串是char( char * )的数组,字符通常存储在char 。 我注意到libC中的一些函数是作为参数整数而不是char。 例如,让我们使用函数toupper()和tolower()都使用int 。 手册页说: 如果c不是无符号字符值或EOF,则这些函数的行为是不确定的。 我的猜测是,使用int , toupper和tolower能够处理unsigned char和EOF 。 但事实上EOF在实践中(有没有关于它的价值的规则?)一个可以用char存储的值,并且由于这些函数不会将EOF转换成其他东西,我想知道为什么toupper不会简单地采取一个char作为参数。 在任何情况下,为什么我们需要接受不是字符的东西(例如EOF)? 有人能为我提供相关的用例吗? 这与fputc或putchar类似,它也采用转换为unsigned char 。 我正在寻找这种选择的确切动机。 我想要被说服,我不想回答,我不知道有一天有人问我。