返回值是什么类型,你今天检查了么?

好了,我知道很多人不屑这个。是啊return 后面有什么好说的?

但是我就在这个里面转了半天,才搞明白的:先看这个。

//...前略,为了说明也简化了函数的写法。

 

#include "windows.h"

#include "iostream.h"

#include "assert.h"

 

char * Funstr(void)

{

       //...前略,为了说明也简化了函数的写法。

 

      

       char strRes[20] = "school dasy.sekai";

      

      

       assert(strRes != NULL);

      

       char strDes[50] ;

      

       strcpy(strDes,strRes);

       return strDes;

 

}

 

 

void main()

{

       char str[20];

      

      

       int length = strlen(strcpy(str,"sekai"));

      

 

       cout<<Funstr()<<endl;

      

}

返回堆内存

 

school dasy.sekai在输出的时候,恩?输出的是什么?

 

char strDes[50] ;

      

       strcpy(strDes,strRes);

       return strDes;

 

查了半天米错啊?后来看见了一个警告才注意到(话说做软件时间有时总是有警告,有时为了赶工也是能忽略就忽略,真不是好习惯呢。),

warning C4172: returning address of local variable or temporary

知道了,return 回的是什么?栈内存的东西啊!

改成:

char * Funstr(void)

{

       //...前略,为了说明也简化了函数的写法。

       char strRes[20] = "school dasy.sekai";

       assert(strRes != NULL);

       char strDes[50] ;

 

 

              //.......如果是这样

              char *strPtr = NULL;

             

              strPtr = (char *)malloc(sizeof(char)*50+1);

              strcpy(strPtr,strRes);

              return strPtr;

利马成了正确的。真是要小心啊!

 

 

//注意本篇为原来写开发日记,原稿打出。不对之处请您指出

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值