猿问

关于char[] 与char*的问题

/*
函数的返回类型是char* 我返回的是 char[]类型,
我跟踪调试的时候返回结果还是正常,一输出就乱码
*/
#include<iostream>

using namespace std;

char* test()
{
 char a[20]= "abc";
 return a;
}

int main()
{
 char* a;
 a = test();
 cout << a <<endl;
 return 0;
}


RectCircle
浏览 1362回答 1
1回答

MadMarical

你好,你使用了静态初始化方法在栈中开辟了内存空间,但是栈中内存是由系统自动释放的,所以当test函数调用完毕后,a的空间被自动释放。所以你应该在堆中开辟内存空间如例程1或者讲a定义为全局变量如例程2。例程1#include <iostream> using namespace std; char* test() {     char *a = new char[3];     *a = 'a';     a++;     *a = 'b';     a++;     *a = 'c';          return a;//此时返回的a为a[2],所以b为c; } int main(int argc, const char * argv[]) {     char* b;     b = test();     cout << b <<endl;     return 0; }例程2#include <iostream> using namespace std; char a[20] = "abc"; char* test() {     return a; } int main(int argc, const char * argv[]) {     char* b;     b = test();     cout << b <<endl;     return 0; }这是我的见解。
随时随地看视频慕课网APP
我要回答