在牛客网刷题,发现即使通过了自测输入,但仍然不能通过,总是出现“段错误:您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起”的报错。
题目:写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字母,然后输出输入字符串中该字母的出现次数。不区分大小写。我一开始写的代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
char str1[50];
char letter;
int count = 0;
int len = 0;
gets(str1);
scanf("%c", &letter);
len = strlen(str1);
for(int i=0;i<len;i++)
{
if (tolower(str1[i]) == tolower(letter))
count++;
}
printf("%d", count);
return 0;
}
经过反复的报错,我最终找到了错误原因:数组长度问题。当我把"char str1[50]" 改成 “char str1[500]” 后,才最终通过了。如此说来,报错原因就是数组越界了,但事实上也没有越界呀,可能这只是出题人的要求吧!难搞哦