ところで話が変わりますが
strtok()関数について
下記のコードだとクラッシュしていまいます。

char *str = "a,b,c";
char *str_ret;

str_ret = strtok(str, ",");

逆にこちらの定義だと正常に動作します。

char str[] = "a,b,c";
char *str_ret;

str_ret = strtok(str, ",");


「str[] = "a,b,c"」と「*str = "a,b,c"」では
領域の確保のされ方(?)が違うのでしょうか?

勘ですが「str[]」定義の場合はスタックに"a,b,c"という
領域の確保を行っている状態で書き換え可能なのではと思っていて
逆に「*str」定義の場合はモジュールに埋め込まれている
書込み禁止領域のアドレスが設定されているのではないかと思っています。


この辺がよくわかっていないので誰かハイエンドな方、助言してもらいたいんですが。。。
そこにハマったときに知ったんですがstrtokって渡したアドレスの特定のトークンが
見つかった場合、'\0'文字で埋めているんですね。
あとVS2005以降ではstrtok_sというスレッドセーフなモノも提供されているらしいです。