这个问题已经有了答案:
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
)。