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

C语言统计元音辅音函数中第二个j索引报错问题排查

错误原因分析与修复方案

核心报错原因:变量名重复定义导致类型混淆

你遇到的第二个循环报错,本质是同一作用域内同名变量重复定义:

  • 函数开头声明了int vowels = 0;,用来存储元音的统计数量
  • 后续又声明了char vowels[] = "aeiouAEIOU";,这会覆盖之前的int类型变量vowels。当第二个循环执行vowels[j]时,编译器认为vowels是int类型而非数组,自然无法用数组下标访问,触发expression must have pointer-to-object type, but it has type int错误。

附带的其他代码问题

除了核心报错,代码还有两处关键逻辑错误:

  1. 空输入判断错误:if (src == "")是无效判断,""是字符串常量的指针,和输入指针src的地址永远不会相等。正确写法是检查指针是否为空src == NULL,或者检查字符串是否为空*src == '\0'。
  2. 结果赋值错误:dstC = &cons;只是修改了函数内部的指针副本,不会改变main函数中传入的变量值。必须通过解引用指针,直接给目标内存赋值,比如*dstC = cons;。

修复后的完整代码

int count_vowels_consonants(unsigned char* src, int* dstV, int* dstC) {
    // 正确判断空指针或空字符串
    if (src == NULL || *src == '\0') {
        return -1; 
    }
    char consonants[] = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ";
    // 重命名统计变量,避免和元音数组冲突
    int vowel_count = 0; 
    int consonant_count = 0; 

    // 统计辅音,找到匹配后跳出内层循环优化性能
    for (int i = 0; src[i] != 0; i++) {
        for (int j = 0; consonants[j] != 0; j++) {
            if (src[i] == consonants[j]) {
                consonant_count++;
                break;
            }
        } 
    }
    // 给传入的目标变量赋值
    *dstC = consonant_count; 

    char vowels[] = "aeiouAEIOU"; 
    // 统计元音
    for (int i = 0; src[i] != 0; i++) {
        for (int j = 0; vowels[j] != 0; j++) {
            if (src[i] == vowels[j]) {
                vowel_count++;
                break;
            }
        }
    }
    *dstV = vowel_count; 

    return 0; 
}


int main(void) {
    char src[] = "ABACEDI0O1UR"; 
    // 6 vowels, and 4 consonants
    int dstV = 0; 
    int dstC = 0; 
    int ret = count_vowels_consonants(src, &dstV, &dstC); 
    return 0; 
}

修复说明

  • 将统计元音的变量名改为vowel_count,彻底避免和元音数组vowels的命名冲突,解决核心报错
  • 修正空输入判断逻辑,确保边界情况处理正确
  • 通过解引用指针赋值,让统计结果正确传递回main函数
  • 内层循环添加break,减少不必要的循环次数,提升代码效率

内容的提问来源于stack exchange,提问作者Gabriel Burzacchini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:03:27