我正在写一个C程序,它应该接受一个字符数组,然后计算其中所有的小写字母,所有的大写字母以及所有的元音字母。但是由于某种原因,它没有运行,因为编译器返回了一个分段错误。我不知道它是什么,也不知道问题出在哪里
#include <stdio.h>
int lccount(char x[10]){
int count=0,i,j;
char lowalphabet[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
for(i=0;i<=10;i++){
for(j=0;j<=26;j++){
if(x[i]==lowalphabet[j]){
count++;
}
}
}
return count;}
int uccount(char x[10]){
int count=0,i,j;
char upalphabet[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
for(i=0;i<=10;i++){
for(j=0;j<=26;j++){
if(x[i]==upalphabet[j]){
count++;
}
}
}
return count;}
int vcount(char x[10]){
int count=0,i,j;
char vowels[]={'a','e','i','o','u','A','E','I','O','U'};
for(i=0;i<=20;i++){
for(j=0;j<=10;j++){
if(x[i]==vowels[j]){
count++;
}
}
}
return count;
}
void main(){
char x[10]={'a','W','E','R','s','d','a','e','i','A'};
int v,uc,lc;
v=vcount(x[]);
uc=uccount(x[]);
lc=lccount(x[]);
printf("%d vowels\n%d uppercase\n%dlowercase",v,uc,lc);
}
结果=〉分割故障
2条答案
按热度按时间cgh8pdjw1#
首先,您的
main()
签名是非标准的;其次,您只将数组作为参数与其标识符一起传递。请记住,您的代码中还有许多其他问题。例如,它显示小写8,而实际上有6。检查其他人在您的问题中发布的关于循环的评论,作为修复它的提示。
sg3maiej2#
正如其他人在注解中指出的,你的代码有一个缓冲区溢出,C中的数组从0开始索引,这意味着,如果你有一个26个字符的数组,第一个字符在
0
,第二个在1
,......,第i个在i-1
,第26个在25
:你不能把一个字符串传递给一个
[]
的函数。此外,您的
main()
声明不正确。它应该是以下之一:int main(int argc, const char *argv[])
(如果从命令行使用参数),或1.否则为
int main(void)
。您可以做几件事来改进您的代码:
char
数组和嵌套的for
循环。const
。结果: