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

来源:互联网 发布:温州高铁事故真相 知乎 编辑:程序博客网 时间:2024/05/02 00:08

好了,我知道很多人不屑这个。是啊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;

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

 

 

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

 

原创粉丝点击