g*****1 发帖数: 998 | 1 【 以下文字转载自 Programming 讨论区 】
发信人: guagua1 (), 信区: Programming
标 题: 请教一道c/c++题
发信站: BBS 未名空间站 (Fri Jan 27 22:47:12 2012, 美东)
char *m()
{
char str[50];
strcpy(str,"how are you");
return str;
}
int main()
{
char s[50];
strcpy(s,m());
printf("%s",s);
//cin.get();
return 0;
}
为什么结果可以正确输出呢?我知道return by pointer可以make copy,可是return之
后storage不是free了吗?
另外,为什么下面这个就只能由一部分正确输出?
char *m()
{
char str[20];
strcpy(str,"how are you");
return str;
}
int main()
{
printf("%s",m());
//cin.get();
return 0;
}
然后上面char str[20];改成比如char str[50],输出就完全是乱得了 | h*c 发帖数: 1859 | 2 undefined
【在 g*****1 的大作中提到】 : 【 以下文字转载自 Programming 讨论区 】 : 发信人: guagua1 (), 信区: Programming : 标 题: 请教一道c/c++题 : 发信站: BBS 未名空间站 (Fri Jan 27 22:47:12 2012, 美东) : char *m() : { : char str[50]; : strcpy(str,"how are you"); : return str; : }
| s******n 发帖数: 3946 | 3 因为m()函数产生的数组在stack上,越大的话,子串被printf调用过程中破坏的可能越
小。 | r***e 发帖数: 213 | 4
我概念太差了,把帖子给删了。
【在 s******n 的大作中提到】 : 因为m()函数产生的数组在stack上,越大的话,子串被printf调用过程中破坏的可能越 : 小。
|
|