错误:数组下标在函数中有类型'char'(C)

时间:2018-05-09 19:19:40

标签: c

我在C中写了以下函数:

void count(int arr[N]) {
    char current;
    while(scanf(" %c", &current) > 0 && (current != '#'))
    {
        if(current >= 'A' && current <= 'Z') {
            current += 32;
        } else if(current < 'a' || current > 'z') {
            continue;
        }
        current -= 97;
        arr[current]++;
    }
}

虽然我在编译时收到警告:error: array subscript has type 'char'。我不能将current用作int值吗?

1 个答案:

答案 0 :(得分:1)

char类型可以是有符号或无符号的,具体取决于编译器配置。该警告告诉您current恰好为负数,代码将具有未定义的行为,因为您可能会访问并尝试修改数组边界外的字节。鉴于您的代码并假设目标系统使用ASCII,它将不会发生。

您可以通过将'a'的偏移量直接计算为int表达式而不是更新char变量来阻止警告。

这是一个修改后的版本,仍然采用ASCII但使用更明确的字符值:

void count(int arr[N]) {
    char current;
    while (scanf(" %c", &current) > 0 && current != '#') {
        if (current >= 'A' && current <= 'Z') {
            arr[current - 'A']++;
        } else if (current >= 'a' && current <= 'z') {
            arr[current - 'a']++;
        }
    }
}