当前位置: 技术问答>linux和unix
关于函数回传字符数组指针问题
来源: 互联网 发布时间:2016-02-07
本文导语: 今天遇到一个问题(类似),麻烦高人指点一下: #include #include char * straddress(){ char a[]={'a','b','c',''}; printf("%xn",a); //打印数组的地址 return a; } int main(){ char *b; b= straddress(); printf...
今天遇到一个问题(类似),麻烦高人指点一下:
#include
#include
char * straddress(){
char a[]={'a','b','c',''};
printf("%xn",a); //打印数组的地址
return a;
}
int main(){
char *b;
b= straddress();
printf("%xn",b); // 检测 B的地址是否和A相同
while(*b!= '') //判断条件,也许问题在这
printf("%c",*b++);
return 0;
}
结果:a,b 地址相同,但在main()函数中只能打印出一个:a 下面全是乱码
但是在下面的函数中没有问题:
int main(){
char a[]={'a','b','c',''};
char *b;
b= a;
while(*b!= '')
printf("%c",*b++);
return 0;
}
按正常考虑,b不是也指向了a的字符数组了吗?怎么从函数中传回来就不行了呢?
多谢!!
能否知道底层是如何实现的?
#include
#include
char * straddress(){
char a[]={'a','b','c',''};
printf("%xn",a); //打印数组的地址
return a;
}
int main(){
char *b;
b= straddress();
printf("%xn",b); // 检测 B的地址是否和A相同
while(*b!= '') //判断条件,也许问题在这
printf("%c",*b++);
return 0;
}
结果:a,b 地址相同,但在main()函数中只能打印出一个:a 下面全是乱码
但是在下面的函数中没有问题:
int main(){
char a[]={'a','b','c',''};
char *b;
b= a;
while(*b!= '')
printf("%c",*b++);
return 0;
}
按正常考虑,b不是也指向了a的字符数组了吗?怎么从函数中传回来就不行了呢?
多谢!!
能否知道底层是如何实现的?
|
因为数组a是临时变量,函数返回后,该临时变量就会被释放掉.返回的只是一个地址,但地址的内容已经被释放掉了.
|
因为a指向的是堆栈地址。
在a前面加上static,即可实现你的目的。
static char a[]={'a','b','c',''};
具体查阅static资料.
在a前面加上static,即可实现你的目的。
static char a[]={'a','b','c',''};
具体查阅static资料.