You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复「指针与整数比较」(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 18:18:00