这道题该如何做啊Range error是什么意思

这道题该怎么做啊?Range error是什么意思?
【习题6.050】系统给定外部字符串s和整型数组c[26](不需要
自行定义)。编写程序,将字符串s中26个小写字母出现的次数
依次统计到数组c中。例如,当s=“abcijkabcdexyzuvwx”时,
数组c的26个元素值依次为:2 2 2 1 1 0 0 0 1 1 1 0 0 0
 0 0 0 0 0 0 1 1 1 2 1 1。

void main()
{char str[]="s";
 int i=0,a,b;
 b=strlen("s");
 for(i;i<=b;i++)
  { 
  a=str[i]-97;
  c[a]+=1;
  }
}

我错在哪里啊?总是提示Range error.

------解决方案--------------------
void main()
{char str[]="s";
 int i=0,a,b;
 b=strlen("s");
 for(i;i<b;i++)
{
a=str[i]-97;
c[a]+=1;
}
}
------解决方案--------------------
探讨

char c[26] = {0};

int main()
{
char str[]="abcdefg";
int i=0, b;
b = strlen(str);
while(b)
c[str[--b]-'a'] += 1;

for (i = 0; i < 26; ++i)
printf("%c\t%d\n", 'a' + i, c[i]) ;

system("p……