C语言同时输入两个越界字符串

C语言同时输入两个越界的字符串,得到了一个输出
#include<stdio.h>

int main()
{
    char s1[8];
    char s2[8];
    scanf("%s",s1);
    scanf("%s",s2);
    printf("%s##%s##",s1,s2);
    return 0;
}
运行结果

img

请问这个原因是什么

听说和排列有关系,但实在不明白怎样排可以得到这个输出

你输入的串太长了。
你输入了8个字符,但数组也只有8个字符,导致字符串没有结束符。用%s是输出字符串
数组改大一点就好了,比如char s1[20]