这个问题已经有了答案:
array subscript has type 'char'
4个答案
我在C中有以下代码:

char input[127] = "hello world";

isxdigit(input[0]);

但我得到了以下警告:
warning: array subscript has type 'char'

原因是什么?如何解决?

最佳答案

原因是在c实现中,isxdigit()是使用数组查找作为宏实现的。
只要输入字符串只包含字符

isxdigit ((int)input[0]);

或者,如果您认为强制类型转换很难看,可以借助于一个良性表达式,例如添加0:
isxdigit (0 + input[0]);  /* Avoid cast by using an int-typed expression. */
isxdigit (+input[0]);     /* Same thing using unary plus instead of addition. */

由于c标准要求isxdigit也是一个函数,因此您可以选择调用该函数而不是宏:
(isxdigit)(input[0]);

甚至
#undef isxdigit
isxdigit(input[0]);

这不会产生任何警告,因为input[0]被提升为int(假设先前的#include <ctype.h>
正如cmaster正确指出的那样,一旦您的char被签名并包含负值,这些解决方案就会崩溃。在这种情况下,您必须首先转换为unsigned char(如果需要,则转换为int)。

09-25 16:48