用于计算 C 中的字母的函数由于最奇怪的原因不起作用



我有个一直让我头疼的作业要做。我有一个字符数组被称为"词[]"。它最多有64个字符长,这就是为什么'i'会一直计数到那个数字。现在我想计算数组中所有的元音,但由于某种原因,它告诉我比实际多了一个元音,最多有9个元音。从9个元音开始,它似乎给了我正确的元音数量。

#include<stdio.h>
#include<ctype.h>
int vowelcounter(char word[]) {
int count = 0;
for (int i=0; i<64; i++) {
word[i] = toupper(word[i]);
if (word[i]=='A' || word[i]=='E' || word[i]=='I' || word[i]=='O' || word[i] == 'U') {
count++;
}
}
return count;
}
int main() {
char word[64];
scanf(" %s", word);
printf("Number of vowels is %in", vowelcounter(word));
return 0;
}

我试着用一个switch case来代替if case,但是没有用。

OP的问题:

用户可以输入比最大长度短的字符串,您应该遍历数组,直到找到字符。或者用strlen计算其长度,并将其作为停止点。

实际上,您没有将数组初始化为0,并且不管字符串的长度如何遍历整个数组。因此没有定义的行为。

缓冲区溢出漏洞:

程序容易发生缓冲区溢出。是什么阻止一个人一次输入超过64个字符?考虑使用fgets来读取整行,然后相应地解析它。它最多读取n - 1个字符,并以空结束字符串。

相关内容

  • 没有找到相关文章

最新更新