> char *s1 = "";
ここで、s1には "" を格納するためのアドレスが入っていて
そのアドレスの先には '\0' を入れるための 1byte 分のメモリしか
確保されていない。