一个很怪异的指针内存分配现象,大家一起来讨论一下原因!(VC2005),该怎么解决

一个很怪异的指针内存分配现象,大家一起来讨论一下原因!(VC2005)
char   *p   =   SubString();//函数内容随便,就是要返回一个char*   类型

//下面的strcpy有可能会造成替换不完全,但先不考虑这个问题  

strcpy(p,   "1111 ");   //这里拷贝就可以成功,莫非在
                                      //char   *p   =   SubString(str,   2,   5);时p自动分配了内存?  

char   *pp   =   "2222 ";    
strcpy(pp,   "3333 ");   //会报错.明显是没有分配内存;
                                        //若上面改为char   pp[]   =   "2222 ";就不会出错。因为分配
                                        //了内存。
                                        //难道char   *p   =   SubString(str,   2,   5);
                                        //方式接收,p就可以自动分配内存   ?


------解决方案--------------------
char *pp = "2222 ";
strcpy(pp, "3333 ");

这个报错是因为没有分配内存?

应该是不予许修改常量区得值.
------解决方案--------------------
char *pp = "2222
类型为 const char *

------解决方案--------------------
性质是一样的。 还是不能够更改的。
that is violation writing location