提个小问,希望各位帮帮忙!

题目:Lambda 指挥官度过了令人难以置信的成功一周:她完成了她的 LAMBCHOP 世界末日装置的第一次试运行,她俘获了 Bunny Rebellion 的六名关键成员,并在俄罗斯方块中打破了她的个人最高分。为了庆祝,她为每个人都点了蛋糕——即使是最底层的奴才!但是奴才之间的竞争非常激烈,如果你不为每个人切出完全相同的蛋糕,你就会遇到大麻烦。

蛋糕是圆形的,边缘用 M&M 巧克力装饰。但是,虽然蛋糕的其余部分是统一的,但 M&Ms 却不是:有多种颜色,每个仆从必须得到完全相同的 M&Ms 序列。 Lambda 指挥官讨厌浪费,不会容忍任何剩菜剩饭,因此您还想确保您可以供应整块蛋糕。

为了帮助您最好地切蛋糕,您已将蛋糕上 M&Ms 的颜色序列变成了一个字符串:每个可能的字母(a 和 z 之间)对应一种独特的颜色,并且 M&Ms 的序列按顺时针方向给出(装饰在蛋糕的外边缘形成一个圆圈)。

编写一个名为 answer(s) 的函数,给定一个长度小于 200 个字符的非空字符串来描述 M&Ms 的序列,返回可以从蛋糕上切下的最大数量的相等部分,而不会留下任何剩菜。
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main( )
{
int length(char* s);
int l,j,g=0,i=0;
char str[201];
scanf("%s",str);
l=length(str);
here:
i+=1;
if(str[0]==str[i])//找到与首字符相同的字符
{
int s=(l/i);
for(j=0;j<=l-i;j+=i)
{
if(str[0]==str[(i+j)])
{
char s1[i+1];
char s2[i+1];
strncpy(s1,str,i);
strncpy(s2,str+i,i);
if(strcmp(s1,s2)==0)//分段比较
printf("%d",s);
break;
if(strcmp(s1,s2)!=0)
{printf("1");
break;}

       }

 else
         printf("1");
       }
   }
   if(str[0]!=str[i])
   {
       goto here;
   }

for(int j=1;j<l+1;j++)//当字符串里各个字符不同时的情况
   {if(str[0]!=str[j])
      {g++;}
      }
    if(g==l)
        printf("1");

return 0;
}

int length(char* s)//字符串的长度
{
int i = 0;
while (*s != '\0')
{
i++;
s++;
}
return i;
}
当我输入abcdabcd的时候就会退出程序,这是为什么?