读书人

关于函数回传字符数组指针有关问题

发布时间: 2012-03-31 13:13:26 作者: rapoo

关于函数回传字符数组指针问题
今天遇到一个问题(类似),麻烦高人指点一下:
#include <stdio.h>
#include <>

char * straddress(){

char a[]={ 'a ', 'b ', 'c ', '\0 '};
printf( "%x\n ",a); //打印数组的地址
return a;
}

int main(){

char *b;
b= straddress();

printf( "%x\n ",b); // 检测 B的地址是否和A相同

while(*b!= '\0 ') //判断条件,也许问题在这
printf( "%c ",*b++);

return 0;
}
结果:a,b 地址相同,但在main()函数中只能打印出一个:a 下面全是乱码

但是在下面的函数中没有问题:
int main(){
char a[]={ 'a ', 'b ', 'c ', '\0 '};
char *b;
b= a;
while(*b!= '\0 ')
printf( "%c ",*b++);

return 0;
}


按正常考虑,b不是也指向了a的字符数组了吗?怎么从函数中传回来就不行了呢?

多谢!!

能否知道底层是如何实现的?


[解决办法]
因为数组a是临时变量,函数返回后,该临时变量就会被释放掉.返回的只是一个地址,但地址的内容已经被释放掉了.
[解决办法]
因为a指向的是堆栈地址。

在a前面加上static,即可实现你的目的。

static char a[]={ 'a ', 'b ', 'c ', '\0 '};


具体查阅static资料.

读书人网 >UNIXLINUX

热点推荐