strcat函数不能连接相同的字符串吗

问题遇到的现象和发生背景

img

问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<string.h>
int main(){
    char s1[100001],s2[100001];
    while(scanf("%s\n%s",s1,s2)!=EOF){
            if(strlen(s1)<strlen(s2)){
        printf("no\n");
    }
            strcat(s1,s1);
    if(strlen(s1)>=strlen(s2))
    {
        if(strstr(s1,s2)==NULL){
        printf("no\n");
    }
    else
    printf("yes\n");
    }
    }
    return 0;
}


运行结果及报错内容

img

我的解答思路和尝试过的方法
我想要达到的结果

img


想知道为啥我直接用strcat(s1,s1)调试的时候报错,用了s3让它等于s1再连接s1就是对的了,莫非是因为strcat不能连接相同的字符串??


strcat的可能实现,如果2个参数指向同一个的话,那么s永无止境了。
void mycat(char *d, char *s)
{
    while (*d)  d++;
    while (*s)  *d++ = *s++;
    *d=*s;
}

已经有人解答strcat的函数原型了,看函数原型就知道了,自己连接自己是不成功的!因为该函数内部采用自增的方式,已经到了字串末尾了。怎么去连接吗?

你可以采用内存复制函数替换
memcpy(&s1[strlen(s1)],s1,strlen(s1));
只需要一句就够了。