为什么我的 strcmp 突然结束我的程序?

why is my strcmp ending my program abruptly?

#include <stdio.h>
#include <string.h>

void processString(char *str, int *totVowels, int *totDigits);

int main()
{
    char str[50], *p;
    int totVowels, totDigits;

    printf("Enter the string: \n");
    fgets(str, 80, stdin);

    if (p = strchr(str, '\n')) *p = '[=10=]';

    processString(str, &totVowels, &totDigits);
    printf("Total vowels = %d\n", totVowels);
    printf("Total digits = %d\n", totDigits);

    return 0;
}

void processString(char *str, int *totVowels, int *totDigits)
{
    int i, j;
    char tester[11] = {'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 < 11; j++)
            {
                if (strcmp(str[i], tester[j]) == 0)
                {
                    *totVowels+=1;
                }
            }
        }
    }
}

我的代码正在尝试计算数字和元音字母在字符串中出现的次数。

我的字符串比较试图检查元音,但程序在到达 strcmp 行时结束。为什么会这样?我的语法有误吗?

P.S。我只允许在processString功能中编辑,其余的都给了。

你的问题出在代码if (strcmp(str[i], tester[j]) == 0)上。因为您引用的是一维数组,所以取消引用是单个字符。本质上,您是在比较两个 chars,而 chars 可以像 ints 一样进行相等比较。而 strcmp 是为比较 字符串 而设计的,而不是单个 chars。这就是它出现段错误的原因(段错误是由于无效的指针取消引用引起的。在这种情况下,它试图取消引用一个非指针。绝对不行。)

修复方法是将该行替换为:if (str[i] == tester[j])