>>307
char *str = "vaka";

と初期化したstrの指す先にある領域は書き換えてはいけないということだ。
これはCの規格で決まってる。もしやってしまった場合、プログラムの動きは不定になる。

http://www.catnet.ne.jp/kouno/c_faq/c1.html#32