首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

难道这次又是运气好?——返回栈指针居然结果正确了解决方法

2012-04-05 
难道这次又是运气好?——返回栈指针居然结果正确了#include stdio.h#include stringchar * Func(void){c

难道这次又是运气好?——返回栈指针居然结果正确了
#include <stdio.h> 
#include <string>
char * Func(void)
{
char* str="Hello World"; 
return str;
}

void main()
{
char *a;
a=Func();
printf("a=%s\n",a);
printf("strlen(Func())=%d\n",strlen(Func()));

}

输出结果
a=Hello World
strlen(Func())=11

我用的vc6.0,这太诡异了,返回栈指针居然结果正确了,难道return之后没释放吗?还是我运气好?
我的程序若是改成:
#include <stdio.h> 
#include <string>
char * Func(void)
{
char str[20]="Hello World"; 
char* p=str;
return p;
}

void main()
{
char *a;
a=Func();
printf("a=%s\n",a);
printf("strlen(Func())=%d\n",strlen(Func()));

}
谁能解释?

[解决办法]
存放的地方不同,结果当然不同。
char * Func(void)
{
char* str="Hello World"; //这个存放在常量空间。
return str;
}

har * Func(void)
{
char str[20]="Hello World"; //这个存放于栈空间。
char* p=str;
return p;
}

热点排行