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

C语言统计元音数字代码执行strcmp时异常终止是什么原因?

问题原因
  • 核心错误是strcmp函数的传参类型不匹配:strcmp要求传入两个以'\0'结尾的C字符串首地址(char*类型),你传入的str[i]和tester[j]都是单个char类型的字符,程序会把字符的ASCII值当做内存地址去访问,属于非法内存访问,直接触发崩溃。
  • 次要问题:你定义的tester数组长度为11,但仅初始化了10个元音字符,剩下的1个元素值是随机的,循环j < 11时会读取到无效值。
  • 隐含依赖问题:isdigit、isalpha函数来自<ctype.h>头文件,如果编译有警告可以补充引入,不会影响你仅修改processString的要求。
修复后的processString函数代码
void processString(char *str, int *totVowels, int *totDigits)
{
    int i, j;
    // 调整数组长度为10,匹配元音字符总数
    char tester[10] = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};

    *totDigits = 0;
    *totVowels = 0;

    for (i = 0; i < strlen(str); i++)
    {
        if (isdigit(str[i]))
        {
            *totDigits += 1;
        }
        else if(isalpha(str[i]))
        {
            for (j = 0; j < 10; j++)
            {
                // 单个字符直接用==比较即可,不要用strcmp
                if (str[i] == tester[j])
                {
                    *totVowels+=1;
                    // 匹配到就可以跳出内层循环,不需要继续遍历
                    break;
                }
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Tajoh Programmer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:45:09