社区
C++ 语言
帖子详情
函数返回值的问题(郁闷中)
bigchief
2004-07-12 01:35:18
#include <stdio.h>
char *Func(void)
{
char str[20]="hello world";
return str;
}
main()
{
printf("%s\n",Func());
return 0;
}
这样就能返回hello world,如果改成
char str[]="hello world",就不行了,能说说原因吗?
...全文
199
10
打赏
收藏
函数返回值的问题(郁闷中)
#include char *Func(void) { char str[20]="hello world"; return str; } main() { printf("%s\n",Func()); return 0; } 这样就能返回hello world,如果改成 char str[]="hello world",就不行了,能说说原因吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
runall
2004-07-21
打赏
举报
回复
函数不能返回在栈中分配内存空间的指针
mainSean
2004-07-21
打赏
举报
回复
up
疯狂的技术宅
2004-07-21
打赏
举报
回复
该说的楼上的都说了,只好灌一句
gyj_china
2004-07-21
打赏
举报
回复
#include <stdio.h>
char str[20];
char *Func(void)
{
strcpy(str,"hello world");//注意变量的生命周期
return str;
}
main()
{
printf("%s\n",Func());
return 0;
}
hchinside
2004-07-21
打赏
举报
回复
你根本就不应该这么写
kaphoon
2004-07-21
打赏
举报
回复
返回局部变量的指针
在标准中讲是不可定义的,也就是不可预测的
所以你的结果本身就没有任何意义~~
qwertasdfg123
2004-07-12
打赏
举报
回复
楼主是输不出来的。
str一个临时变量,函数返回时会自动释放内存。
#include <stdio.h>
#include <sstream>
std::string Func(void)
{
std::ostringstream temp;
temp << "Hello World";
return temp.str();
}
main()
{
printf("%s\n",Func().c_str());
return 0;
}
WangOutVcInJava
2004-07-12
打赏
举报
回复
在函数中"Hello World"是在系统分配的只读区中存在的。
char str[20]="hello world";是把系统只读区内容拷贝到str为首地址的函数Func的栈中,
是局部变量。在Func函数结束后,esp(栈指针)会复位。return str;会返回str的首地址,这时str指向的内容仍为"hello world",但是跟着调用printf(两次),会压入栈两个参数(从右到左),和函数入口地址,以及一些寄存器edi...,这样会把str指向的内容覆盖。因而,在主程序中print出现乱码。
解决问题的方法我知道有两种:
1
bianliuwei(C++一辈子)说的是一种,即
char* str="hello world";这样return str;返回的是系统只读区指向"hello world"的地址。
但是,这样做是没有保证的。第一,可能被后继数据覆盖;第二,这是只读的,不方便操作。
2
static char str[20]="hello world";return str;
这样系统会在编译时,在static存储区,开辟空间存储"hello world",str指向相应的地址。
这样,可以对其进行操作,(这不是只读的)。
firesgoo
2004-07-12
打赏
举报
回复
char str[20]="hello world";
分配的空间,有未被赋值,当
printf("%s\n",Func());时,
当然会出现乱码
bianliuwei
2004-07-12
打赏
举报
回复
楼主:你的机子上能得到你说的结果吗?我运行了一下,乱码!
为何不这样呢:
#include <stdio.h>
char* Func()
{
char* str="hello world";
return str;
}
int main()
{
printf("%s\n",Func());
return 0;
}
注意cancel_wakeup等
函数
的
返回值
1 注意cancel_wakeup等
函数
的
返回值
这是最近调试发现的一个
问题
,原来由于为了排查一个同事的暴力压力测试下的
问题
,我检查代码过程
中
发现原来的cancel_wakeup
函数
没有处理判断
返回值
。reactor()->cancel_wakeup(this,ACE_Event_Handler::WRITE_MASK);由于担心有什么错误处理被遗漏了
函数
的
返回值
,16位/32位
同事的一段代码里出现的异常,内存访问错误。遂一起排查。使用的是VC6.0,系统是Win2K。 主调
函数
func1,传进一个数组的首地址。用数组的下标方式访问,下标是一个子
函数
func2的
返回值
。异常出现在这里。一开始怀疑传进来的地址有
问题
,跟踪下来发现是对的。我怀疑func2的
返回值
,但看到这个
函数
很简单,就一句返回一个结构的WORD成员,好象不应该有错。 func2有一个参数,是一个结构指针l
php提交
返回值
,PHP
返回值
PHP
返回值
例子. return()
函数
的用法function square ($num){return $num * $num;}echo square (4);// outputs '16'.?>
函数
不能返回多个值,但为了获得简单的结果,可以返回一个列表。例子. 返回一个数组以得到多个
返回值
function small_numbers(){return array (0, 1,...
C语言
中
一个
函数
返回值
不一致的
问题
对于一个只用C写十几二十行程序的菜鸟,也能遇到这样那样诡异
郁闷
的
问题
,其实知道点底层也挺好的。先说这个
问题
: [code="c"]#include #include #define max(a,b) ((a)>(b)?(a):(b)) int computeMax(int [], int); int main() { int array[10] = {1...
运维-不是所有路径都
返回值
导致的隐含错误
近期,协助好友调试了一个PlutoSDR IIO C程序,过程出乎意料的艰难。 现象 程序偶然会崩溃,报各种0xc00005、堆错误、非法内存操作。即使
中
途不报错,退出时也会崩溃,非常不优雅。此外,64位Release每次都存在这个
问题
。32位 Release不是每次都出现,所有Debug版本正常。 环境:windows 10 编译器:mingw 框架:Qt5.9 初步分析 初步来看,考虑到仅是R......
C++ 语言
65,210
社区成员
250,515
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章