我在C中写了以下函数:
void count(int arr[N]) {
char current;
while(scanf(" %c", ¤t) > 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
值吗?
答案 0 :(得分:1)
char
类型可以是有符号或无符号的,具体取决于编译器配置。该警告告诉您current
恰好为负数,代码将具有未定义的行为,因为您可能会访问并尝试修改数组边界外的字节。鉴于您的代码并假设目标系统使用ASCII,它将不会发生。
您可以通过将'a'
的偏移量直接计算为int
表达式而不是更新char
变量来阻止警告。
这是一个修改后的版本,仍然采用ASCII但使用更明确的字符值:
void count(int arr[N]) {
char current;
while (scanf(" %c", ¤t) > 0 && current != '#') {
if (current >= 'A' && current <= 'Z') {
arr[current - 'A']++;
} else if (current >= 'a' && current <= 'z') {
arr[current - 'a']++;
}
}
}