やっぱ、分かってる人には当たり前のようで。
んなわけで少しでも変更する可能性のあるデータの場合は、
char* s1 = "abc";
じゃなくて
char d1[] = "abc";
のように書きましょうってことで。
こっちなら、きちんとデータ領域に確保してくれます。(あってるよな?)
1個目の場合でのメモリオーバランのエラーはものすごく怖いよ〜。

何のことか分からん人もとりあえず下のほうを使ったほうがいいと思います。