日期:2014-05-16  浏览次数:20808 次

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