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

命令行下统计字符串字符出现次数的C程序报错求助

解决C语言中“指针与整数比较”的警告问题

警告原因

你代码里的c被定义为char*(字符指针),但s[i]是单个char类型(本质是对应ASCII值的整数),if(s[i]==c)相当于拿单个字符和指针的内存地址做比较,完全不符合统计字符出现次数的逻辑,因此触发了编译器警告。

修复步骤

  1. 修正变量类型:把存储目标字符的c从char*改为char——我们需要的是单个字符,不是字符串指针。
  2. 调整函数签名:countOccur函数的第一个参数应该接收单个字符,而非字符指针,所以函数声明和定义都要改成int countOccur(char c, char *s)。
  3. 正确获取命令行参数:argv[1]是用户传入的第一个字符串,取它的第一个字符argv[1][0]赋值给char c;同时添加参数检查,防止用户未传入足够参数导致程序崩溃。

修改后的完整代码

#include <stdio.h>
#include <stdlib.h>

int countOccur(char c, char *s);

int main(int argc, char *argv[])
{
    int count = 0;
    // 检查是否传入足够参数
    if (argc < 3) {
        printf("请传入目标字符和待统计字符串\n");
        return 1;
    }
    char c = argv[1][0]; // 取第一个参数的首字符
    char* s = argv[2];

    count = countOccur(c, s);

    printf("%d\n", count);

    return 0;
}

int countOccur(char c, char *s)
{
    int i, count = 0;

    for(i = 0; s[i]; i++)  
    {
        if(s[i] == c) // 现在是单个字符间的合法比较
        {
          count++;
        }
    }

    return count;
}

额外说明

  • 如果用户传入的第一个参数是多字符字符串(比如"abc"),程序只会统计s中'a'的出现次数;若要支持匹配整个子串,需要重新设计逻辑。
  • 参数检查是必要的,避免程序因访问空指针而崩溃。

内容的提问来源于stack exchange,提问作者Conor Maguire

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:30:58