追加で質問して申し訳ないのですが
while(*s1++ = *s2++) ;とした場合
最終的なs1は配列外を指すポインタになると思うのですが大丈夫なんですかこれは