函数返回字符串

来源:互联网 发布:java最新面试题 编辑:程序博客网 时间:2024/05/16 17:48



//-------------------------------------------------------------分析------------------------------------------------------------------

char   *fun()


        char   s[10]; 
        strcpy   (   s   ,   "abc "   ); 
        return   s; 


----------- 

这个函数的问题就是所谓的返回 指向栈地址的指针

char   s[10];局部变量是在函数体内声明的,   所以在退出函数时,   会自动销毁.返回指针s指向的是栈地址,   在函数退出后,   就成为无效指针.

//--------------------------------------------------------------------------------------------------------------------------------------

其实就是要返回一个有效的指针,尾部变量退出后就无效了。


那么一个函数如何返回一个字符串呢?

解决方法如下:

1.

char   *fun() 

        static   char   s[10];          //
        strcpy   (   s   ,   "abc "   ); 
        return   s; 


2.

使用分配的内存,地址是有效的
char   *fun() 

        char*   s   =   (char*)malloc(100,   sizeof(char*)   ); 
        if   (s) 
                strcpy   (   s   ,   "abc "   ); 
        return   s; 
}  //那么在哪儿将返回的地址free掉


3. 也可以用全局变量

4.

将地址由入参传入 
char*   fun(char*s) 

        if   (s) 
              strcpy(s,   "abc "); 
        return   s; 

这种方式调用都要注意给s分配的大小是足够。 
可以这样: 
char*   fun(char*s,   int   len) 

        if   (s) 
        { 
              strncpy(s,   "abc ",   len-1); 
              s[len-1]   =   0; 
        } 
        return   s; 


原创粉丝点击