读书人

函数返回指针的有关问题

发布时间: 2012-03-05 11:54:02 作者: rapoo

函数返回指针的问题
#include <stdio.h>
#include <stdlib.h>
char* getz();
int main()

{
char *p;
p=getz();
//cout < <endl;
//cout < <p;
printf( "%c\n ",*(p+8));//ok
printf( "%s\n ",p);//wrong
system( "PAUSE ");
return 0;

}

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

return ps;
}
根据网上搜出来的说话是char s[10];不是static所以返回后释放掉了,所以printf( "%s\n ",p);//wrong,可是为什么printf( "%c\n ",*(p+8));//ok

[解决办法]
printf( "%c\n ",*(p+8));
同样道理,也是错误的。

只不过,有的时候,曾经的栈中的存放变量的那块内存还没被清洗掉。或许还可以访问而已。
[解决办法]
请注意 访问了非法的内存才会崩溃 .....
[解决办法]
//我觉得楼主是错用指针,函数的值传递和引用传递,引用传递就是
//直接修改参数变量内容,楼主把指针用反了,指针指向的变量应该在main函数等
//调用的函数中,而楼主却把分配变量放到被调函数中,等函数返回后你的p=getz();
//得到了地址没错,可是因为被调函数一经返回,所有分配的变量就被释放。内容是不是
//会被改变很难说,即时你上面的程序正确运行、结果正确,这种设计也是错误的。
//应该把变量定义在主调函数中,然后用指针作参数,如下没有测试,大家看看是否正确。
//很少用C有些语法不一定对。
#include <stdio.h>
#include <stdlib.h>
void getz();//
int main()
{char *p;char s[11];
/*初始化s数组后调用函数getz*/
p=&s;
getz(p);
printf( "%c\n ",*(p+8));//ok
printf( "%s\n ",p);//wrong
system( "PAUSE ");
return 0;
}
void getz(char *s)
{int i;
for (i=0; i <10;i++)
{ s[i]=i+ '0 ';
}
s[11] = '\0 ';
}

读书人网 >C语言

热点推荐