/*
函数的返回类型是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;
}
1 回答
已采纳
MadMarical
TA贡献79条经验 获得超122个赞
你好,你使用了静态初始化方法在栈中开辟了内存空间,但是栈中内存是由系统自动释放的,所以当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; }
这是我的见解。
- 1 回答
- 0 关注
- 1361 浏览
添加回答
举报
0/150
提交
取消