c - 使用 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
为什么会发生?我该如何解决?
解决方案
当我用 编译您的代码时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;
}
我希望这可以帮助您解决问题!
推荐阅读
- c# - 如何在dll文件中获取类名和方法名?
- sql - 根据服务年限显示员工职位
- typescript - 按值/引用分配变量
- javascript - 你能捕捉到函数参数抛出的异常吗?
- kubernetes - 如何在 Kubernetes 部署中增加或减少 pod 的数量
- c++ - “void”类型的值不能分配给 CPP 中“int”类型的实体
- intellij-idea - 即使我没有突出显示任何代码,IntelliJ 也会格式化整个文件
- intellij-idea - 如何使用 Intellij 的结构替换将 Bootstrap 4 单选按钮重构为 Bootstrap 5
- python - Python多项式计算效率
- python - 如何变黑 - python 格式化程序 - 在 vscode 开发容器上工作?