首页 > 解决方案 > 使用 isalpha 和 isdigit 时将带符号整数操作数与二进制位运算符一起使用

问题描述

我有一个字符串char str[](假设它不为空)

当我执行迭代时:

for(int i = 0; i<strlen(str);i++)
    {
        if((!isalpha(str[i]))&&((!isdigit[i])))
        {
            printf("something");

        }
    }

我得到以下标记:

Clang-Tidy: Use of a signed integer operand with a binary bitwise operator

为什么会发生?我该如何解决?

标签: c

解决方案


当我用 编译您的代码时clang-cl,它会在语句的行中报告以下错误if

错误:指向函数类型'int(int)'的指针的下标

至于为什么您会看到“二进制按位运算符”错误消息 - Eric Postpischil 提供的评论可能很好地解释了这一点(在我使用的系统上没有作为宏实现,顺便说一句isdigit

只需“移动”一个左括号即可​​解决此错误和其他错误。下面的代码显示了您的行(为对齐添加了空格)和一个更正的版本(我还假设您实际上想要测试str[i]是一个数字,而不是i它本身):

int main()
{
    char str[] = "a-bc-de-fg=12=345";
    for (int i = 0; i < strlen(str); i++) {
 //     if ( ( !isalpha(str[i]) ) && ((!isdigit  [i]  ) ) ) { // Original code
        if ( ( !isalpha(str[i]) ) && ( !isdigit(str[i]) ) ) { // Corrected code
            printf("something");
        }
    }
    return 0;
}

我希望这可以帮助您解决问题!


推荐阅读