如何修复「指针与整数比较」(comparison between pointer & integer)错误?
修复「指针与整数比较」错误的解决方案
咱们一步一步拆解你代码里的问题,然后给出修复后的版本:
核心错误分析
你遇到的「comparison between pointer & integer」错误主要来自这几个点:
- 字符串比较不能用
==:det[i].number是字符数组的首地址(指针类型),而你定义的aad是单个字符(整数类型),直接用==比较就会触发指针和整数的类型不匹配错误。就算aad是字符串,==也只会比较两个字符串的内存地址,不是实际内容。 char aad;定义错误:你用scanf("%s", &aad);读取字符串,但aad是单个字符变量,这么做会导致内存溢出,严重的话会崩溃。- 循环逻辑无效:
i初始值是0,for(b=0;b<i;b++)的循环条件永远不成立,循环根本不会执行。
修复后的完整代码
#include<stdio.h> #include<string.h> int main() { struct details { char number[20]; } det[10]; int inp, i = 0; // 把aad改成和结构体里number长度一致的字符数组 char aad[20]; int b; // 先模拟给det数组赋值(你实际代码里应该有这部分逻辑,不然循环没意义) // 这里示例添加一个测试数据 strcpy(det[0].number, "123456"); i = 1; // 标记已存入的数据数量 puts("Give The Number To Display The Pass Status"); // 读取字符串时,数组名直接传参,不用取地址 scanf("%s", aad); // 循环遍历已存入的det元素,注意用b而不是i作为索引 for(b = 0; b < i; b++) { // 用strcmp比较字符串内容,返回0表示相等 if(strcmp(det[b].number, aad) == 0) { printf("Hello\n"); // 找到匹配后可以break跳出循环,避免不必要的遍历 break; } } return 0; }
关键修复点说明
- 字符串比较用
strcmp:strcmp(str1, str2)会逐字符比较两个字符串,返回值为0时表示两个字符串完全相同,这才是正确的字符串内容比较方式。 - 修正
aad的定义:把char aad;改成char aad[20];,和结构体里的number数组长度保持一致,确保能容纳输入的字符串。 - 修复循环索引:循环里用
det[b].number而不是det[i].number,因为i是已存入数据的数量,b才是当前遍历的索引。 - 补充数据初始化逻辑:我添加了
strcpy(det[0].number, "123456");和i=1;,模拟你实际代码中应该有的数据存入逻辑,不然循环没有可遍历的内容。
内容的提问来源于stack exchange,提问作者Srikar Kailash
相关产品推荐
相关产品推荐

