关于函数回传字符数组指针问题
今天遇到一个问题(类似),麻烦高人指点一下:
#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资料.