关于数组作为返回值的有关问题!请详细些

关于数组作为返回值的问题!请详细些!
下列三种情况,结果不同,原因在哪呢?
情况一:
1、在函数中定义一个数组buf[1024];
char *str()
{
char buf[1024] = "abcdefg"; 
  //或者char *buf = "abcdefg";
return buf;
}

int main()
{
char *a = NULL;
a = str();
printf("%s\n", a);
return 0;
}
结果显示:abcdefg
2、在函数中定义个数组指针;
char *str()
{
char buf[] = "abcdefg";
return buf;
}

int main()
{
char *a = NULL;
a = str();
printf("%s\n", a);
return 0;
}
结果显示:乱码



------解决方案--------------------
http://blog.****.net/zhongguoren666/article/details/7000112
这里讲的可能比你想要的详细~
------解决方案--------------------
探讨
第一种,第二种都是错误行为

------解决方案--------------------
char buf[1024] = "abcdefg";
//或者char *buf = "abcdefg";
LZ,如果我没理解错的话,你的意思是用这两句定义后输出的结果都是"abcdefg"???

不知道你用的什么编译器,但据我所知char buf[1024] = "abcdefg";应该是错误滴~~

正解见1楼链接!!!
飘~过~