一个很怪异的指针内存分配现象,大家一起来讨论一下原因!(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
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