好了,我知道很多人不屑这个。是啊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;
利马成了正确的。真是要小心啊!
//注意本篇为原来写开发日记,原稿打出。不对之处请您指出