C语言编译报错invalid operands to binary + (int*和int*)如何解决
报错触发原因
你代码中int *tab [2001];的声明定义的是长度为2001的int指针数组,每个元素的类型为int *(整型指针),而非普通整型数值。
C语言语法本身确实禁止两个指针直接执行加法运算(仅支持指针与整数的加减运算),你在sum计算行对两个int *类型的元素做加法,就触发了该类型不匹配的报错。
同时你的代码还存在两处隐藏问题:
- 把
atoi返回的int类型值直接赋值给int *类型的数组成员,本身属于类型不匹配的错误操作 tab[2001] = 0属于数组越界访问:长度为2001的数组合法下标范围是0~2000,下标2001超出了数组的内存边界
修复方法
- 修改数组声明:将
int *tab [2001];替换为int tab[2001];,直接声明为存储整型数值的数组,即可正常执行加法运算 - 删除越界赋值行
tab[2001] = 0;,如果确实需要在数组末尾加结束标记,可以改为tab[2000] = 0; - 可选优化:增加文件打开失败的判空逻辑,避免输入文件不存在时触发空指针崩溃
修复后完整代码
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { FILE *flot = fopen("input.txt","r"); // 判空逻辑避免空指针崩溃 if (flot == NULL) { perror("打开input.txt失败"); return 1; } // 改为普通int类型数组 int tab [2001]; char k[255]; int i=0; while (fscanf(flot, "%s", k) != EOF) { int b = atoi(k); tab[i]=b; i++; } int nb = 0; for(int i=0;i<1998;i+=3) { int sum1 = tab[i]+tab[i+1]+tab[i+2]; int sum2 = tab[i+3]+tab[i+4]+tab[i+5]; if(sum2>sum1) nb++; } printf("%i", nb); fclose(flot); return 0; }
内容的提问来源于stack exchange,提问作者CCtuhulu
相关产品推荐
相关产品推荐

