函数返回字符串



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

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; 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值