请教一个char[] 和char *的有关问题
请问一个char[] 和char *的问题?C/C++ codechar * GetA(){char *p123return p}char * GetB(){char p[
请问一个char[] 和char *的问题?
C/C++ codechar * GetA(){char *p="123";return p;}char * GetB(){char p[]="123";return p;}int main(){cout<<GetA()<<endl;cout<<GetB()<<endl;return 1;}
请问下为什么打印GetA的结果是"123",而GetB()打印的结果是乱码是为什么呀?
GetA和GetB中p不都是局部变量,当其退出作用域的时候,不是应该打印出来的数据都是乱码?
[解决办法]因为"123"是全局的,而p[]是栈空间,其内容是从全局的"123"拷贝过去的。
[解决办法]两种方式分配内存的地方是不一样的,char[]分配在函数的堆栈上,函数结束后,内存会释放。而char*不是
分配在函数的堆栈上,所有不会释放。
[解决办法]噢噢..看到了,二楼说的明白啊...
[解决办法]字符串常量保存在数据段。
[解决办法]别说看了这个你还不会
http://www.cnblogs.com/chenyuming507950417/archive/2011/12/29/2306043.html
[解决办法]把"abc"赋给一个字符指针变量时,如
char* ptr = "abc";
因为定义的是一个普通指针,并没有定义空间来存放"abc",所以编译器得帮我们
找地方来放"abc",显然,把这里的"abc"当成常量并把它放到程序的常量区。
如果char* ptr = "abc";写在函数体内,那么虽然这里的"abc\0"被 放在常量区中,但是ptr本身只是一个普通的指针变量,所以ptr是被放在栈上的,只不过是它所指向的东西被放在常量区罢了。
[解决办法][解决办法]"123"分配在.text中,退出函数不会自动释放。
[解决办法][解决办法][解决办法]