avatar
请教一道c/c++题 (转载)# JobHunting - 待字闺中
g*1
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],输出就完全是乱得了
avatar
h*c
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;
: }

avatar
s*n
3
因为m()函数产生的数组在stack上,越大的话,子串被printf调用过程中破坏的可能越
小。
avatar
r*e
4

我概念太差了,把帖子给删了。

【在 s******n 的大作中提到】
: 因为m()函数产生的数组在stack上,越大的话,子串被printf调用过程中破坏的可能越
: 小。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。