社区
C语言
帖子详情
结果为什么不是1111?
lwy123
2010-04-12 02:11:18
#include "stdafx.h"
#include "iostream"
char* test()
{
char a[]="1111";
return a;
}
int _tmain(int argc, _TCHAR* argv[])
{
char *p=NULL;
p=test();
printf("%s",p);
return 0;
}
...全文
149
12
打赏
收藏
结果为什么不是1111?
#include "stdafx.h" #include "iostream" char* test() { char a[]="1111"; return a; } int _tmain(int argc, _TCHAR* argv[]) { char *p=NULL; p=test(); printf("%s",p); return 0; }
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zqlclj
2010-04-12
打赏
举报
回复
[Quote=引用 11 楼 ubuntulover 的回复:]
永远不要返回指向局部变量的指针
[/Quote]
+1
阿磊2013
2010-04-12
打赏
举报
回复
永远不要返回指向局部变量的指针
aozhi
2010-04-12
打赏
举报
回复
return后已经基址寄存器中保存的已经不再是这个堆栈段的段地址了。自然取不到这个段中的数据了。
hacker1125
2010-04-12
打赏
举报
回复
不能返回栈空间。
char* test()
{
char a[]="1111";//栈内容
return a;//a为局部变量,11111存在栈里面,这个函数结束,1111页就消失了。所谓获取到的是不确定的值
itxuls
2010-04-12
打赏
举报
回复
哎。。 学习中。。。
jogger007
2010-04-12
打赏
举报
回复
局部普通变量是放在栈里的,当你该函数执行完毕就会被系统回收。
所以返回地址指向不可预见的内容
OVER
cy330206
2010-04-12
打赏
举报
回复
楼主把数组声明在主函数里面就可以了,
因为函数开始的时候可以分配一定的内存,但是函数结束后,他里面声明的所有的变量都会被销毁
senr0816
2010-04-12
打赏
举报
回复
因为你返回的是数组a[]="1111"的首地址,而a[]的范围仅限于函数内,函数运行结束后数组所占内存即被释放
天亮后说晚安
2010-04-12
打赏
举报
回复
正解
[Quote=引用 2 楼 bitxinhai 的回复:]
char* test()
{
char a[]="1111";
return a;//a为局部变量,函数退出的时候,该变量就会失效,不能保证返回的数据是"1111"
}
[/Quote]
honemay
2010-04-12
打赏
举报
回复
因为a是在函数里分配的,是局部变量,你的函数返回的是a的地址
你p= test(),p指向的那块内存在test()函数销毁时也被释放了
所以你打印出来的是一些不定的东西
可以改成char* a = new char[10];
strcpy(a, "1111");
不过在p =test()后,要 delete p;
bitxinhai
2010-04-12
打赏
举报
回复
char* test()
{
char a[]="1111";
return a;//a为局部变量,函数退出的时候,该变量就会失效,不能保证返回的数据是"1111"
}
ArmStronger
2010-04-12
打赏
举报
回复
a被释放了,加个static就好了
1111
^
1111
【代码】
1111
^
1111
。
为什么IEEE754的偏移量是127而不是128呢
最初出现这个问题是因为我遇到一个将IEEE754转化为十进制的问题,而我的做法是这样的: 因为IEEE754阶码采用移码的形式出现,然后我先把他符号位取反换成了补码,之后转化为了原码,但在对照答案时,我发现我的计算结果要比正确答案小1;百思不得其解。 用一个例子来说明一下我当时的计算思路: 已知阶码是 1000 0011 求其补码是 0000 0011 发现其符号位是0,故为正数,故原码和补码相...
88E
1111
100BASE-T百兆工程(part2--完)
88E
1111
GMII接口配置百兆 前言: 手册传送门即相关资料传送门: 链接:https://pan.baidu.com/s/1dEaDiZVVWWHNvvQkHPXgVw 提取码:ca5w 上一篇博客介绍了88E
1111
的相关内容,本次设计需要将原本千兆的88E
1111
配置成为百兆。 https://blog.csdn.net/qq_43222996/article/details/106207147 一.Control Register - Copper寄存器介绍与配置 1.C
端口号
1111
。为啥接收到的时候不是
1111
我写的端口号
1111
。为啥接收到的时候不是
1111
呢? Java code? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 packageudp;...
88e
1111
的1000base-x to copper(GBIC)配置及使用
1.硬件平台 该硬件平台是采用88e
1111
,实现1000base-x to copper(GBIC),测试平台为一台电脑通过bast-T连接到华为交换机s5700-24tp-si,交换机出的base-x接口连接到88e
1111
的光口,88e
1111
的电口连接电脑。 2.88e
1111
的配置 通过MDIO配置如下: 寄存器 页数 值0x 27 ...
C语言
70,040
社区成员
243,237
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章