>>526
if(*s2)
の打ち損じじゃない?

あとwhileの件、代入演算子にも戻り値があって、
例えば a = (b = 3); とかやるとaにも3が入るんだけど、
while(*s1++ = *s2++) はその応用で、*s1 = *s2 の演算結果が'\0'かどうかを継続条件にしてる。(同時にポインタを先に進めてるがここはとりあえず気にしなくて良い)

つか、>>524 の書き方はトリッキーすぎると思うw
ここは初心者スレですよ?w