c /c++ 函数返回指针

来源:百度知道 编辑:UC知道 时间:2024/05/15 11:36:22
写了一个程序想通过函数返回指针值,但是不知道为什么返回的值是错误的,求教!

char* getz();
int main()

{
char *p;
p=getz();
cout<<endl;
cout<<p;
return 0;

}

char* getz()
{
char s[10];
char *ps;
ps=s;
for (int i=0; i<10;i++)
{
s[i]=i+'0';
}

return ps;
}

#include<iostream.h>
char* getz();
int main()

{
char *p;
p=getz();
cout<<endl;
cout<<p;
return 0;

}

char* getz()
{
static char s[10] ={0}; //这里应该声明为静态,否则你的内存会被释放,这是最关键的
char *ps;
ps=s;
for (int i=0; i<10;i++)
{
s[i]=i + '0';
cout << s[i] << endl;
}

return ps;
}好的程序员的一个基本要求就是对内存非常了解

char s[10]; 这里定义的变量s是在getz函数内部的变量,执行函数的时候在内存栈空间中,函数执行完毕这个变量就会被释放掉,你再返回它的地址只会指向一些莫名其妙的东西,导致程序错误.
非要让函数返回一个指针的话就要动态分配空间:
char* getz()
{
char *s=(char*)malloc(sizeof(char)*20);
char *ps;
ps=s;
for (int i=0; i<10;i++)
{
s[i]=i+'0';
}
}
return ps;
}
然后在主函数里用完后还要用free释放掉

把s[10](按你的程序这里应该是s[11],11是最少的了,最后一个s[10]是得留给放结束符'\0',要不会产生上溢的)改为全局的就可以了:
char* getz();
char s[11];
int main() <