社区
C语言
帖子详情
奇了怪了!
yanxiazhiqiu
2005-11-07 10:18:03
#include<stdio.h>
#include<string.h>
void main(){
char a[]="aa";
char b[2];
int c=strlen(a);
int d=strlen(b);
printf("%d%d\n",c,d);
strcpy(b,a);
int e=strlen(a);
int f=strlen(b);
printf("%d%d\n",e,f);
}
输出结果:
24
02
谁能解释一下啊?
编译器:gcc 3.4.3
...全文
232
14
打赏
收藏
奇了怪了!
#include #include void main(){ char a[]="aa"; char b[2]; int c=strlen(a); int d=strlen(b); printf("%d%d\n",c,d); strcpy(b,a); int e=strlen(a); int f=strlen(b); printf("%d%d\n",e,f); } 输出结果: 24 02 谁能解释一下啊? 编译器:gcc 3.4.3
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yanxiazhiqiu
2005-11-07
打赏
举报
回复
sizeof(a)==3
勉励前行
2005-11-07
打赏
举报
回复
char a[]="aa";
sizeof(a) = 2 或是 3 ?
如果是2,那麼strcpy(b,a);會發生什麼情況?
如果是3,樓主說的情況又是如何出現的?
wuwen19
2005-11-07
打赏
举报
回复
感觉关键是 b 跃界了吧? char b[3]就好了。
yanxiazhiqiu
2005-11-07
打赏
举报
回复
b在内存中是??,为什么他的length会是随机的?
strcpy()是怎么让a由aa ????到 a ????的?
wuwen19
2005-11-07
打赏
举报
回复
学习。
oilking_zhh
2005-11-07
打赏
举报
回复
我作出来得结果是26 22,第一个的输出结果中,d是一个随机的,因为没有内容。
我是用VC6做得,期待中~~~~~~~~
flyelf
2005-11-07
打赏
举报
回复
这涉及到变量在内存中的分布,此处,a和b在内存的分布为
??aa ???????
__~~~
b a
第一个的输出结果中,d显然是一个随机的,可能是4,也可能是1或者是0
而第二个输出中,由于执行了strcpy,把a的第一个字符覆盖为\0了,即内存中的值成为如下:
aa a ?????
__~~~
b a
显然,b的长度成了2,而a则由于第一个字符就是字符串终结符,长度为0
Holmescn
2005-11-07
打赏
举报
回复
这主要是编译器的处理方法。因为a和b都是在main的函数体内,所以应该算自动变量,所以它们都是在栈上被创建,地址应该是连在一起的,我这里只有VC6,所以只说VC6的情况。因为我们用的是IA-32的CPU,所以可以同时传递32位的数据,也就是4个字节长。为了保证CPU的效率,VC6做了字节对齐。也就是所有的数据都是4字节的整数倍。当然这指的是只有大小,没有初始化的变量。比如这里的b,又因为b和a是连在一起的,而b没有结束标志\0,所以b和a就连在一起了。这里b是2,小于4,所以b是4字节,加上a的两字节,一共是6字节。如果b的维数>4了,那就给b 8个字节了。则一共是10字节。VC里的处理是把这些未初始化的字节用0xcc填充。
当然,在strcpy以后,b的空间里有了自己的结束符,所以它就是两字节了。
至于楼主说的,我就不知道了,应该也差不多吧。
Grubby_c
2005-11-07
打赏
举报
回复
我用VC做的也是26 22
jiangabc
2005-11-07
打赏
举报
回复
b在内存中是??,为什么他的length会是随机的?
用strcpy 将“长空间”(a[3])给“短空间”(b[2])时是否“覆盖”是不是和编译器有关,
在VC 6。0里上面题的运行结果2X 22
TC 2。0 里运行结果2X 22
(X 在我机子上分别是6 和 5)
yanxiazhiqiu
2005-11-07
打赏
举报
回复
谁能把char *strcpy(char *dest,char *sour)的内部实现机制说一下?
vikingemail
2005-11-07
打赏
举报
回复
a[2] == '\n'
codearts
2005-11-07
打赏
举报
回复
int d=strlen(b);
这里d都没有初始化,strlen要以\0来作用结束条件,得到结果是随机的
char a[]="aa";
char b[2];
strcpy(b,a);
很明显,a是a[3]这种定义,b是b[2],长度不够,都装不下呀
K
2005-11-07
打赏
举报
回复
char b[3];//char b[2];越界
通往Android的神
奇
之旅
本套Android课程,大家可以一路学习基本控件,控件,网络,自定义View,地图,推送,后端云,项目实战2048游戏等等,通过本套课程,相信大家可以基本掌握Android入门知识。
真是
奇
了
怪
!!!
前面我已经可以上传60M的资源了,可今天怎么变成40M了。晕啊!
脑洞
奇
大!
在文章开头,建议大家先看看周四发的文章,《面试就像谈恋爱,“一见钟情”很重要!》,可能标题起的像广告阅读量比较低。这篇文章结合我10年职场生涯,给大家分享了关于面试的一些理解,如果你是职...
怪
奇
物语第二季/全集Stranger Things迅雷下载
Netflix的叫好叫座剧《
怪
奇
物语 Stranger Things》第二季更新上线日期为美国时间10月27日,第二季讲述在1984年(相隔上季一年),印第安纳州的Hawkins镇市民仍然处于实验室的骇人传闻及秘密所造成的恐慌中,而Will ...
这几个
奇
奇
怪
怪
的网站,看完震到腰疼!
作者:纯洁的微笑来源:纯洁的微笑相信大家对各种各样的网站都已经无感了,因为大部分是那些内容让人提不起兴趣的,但是互联网是一个很大世界。在这个世界里面,散落着很多
奇
奇
怪
怪
的网站,今天就给大...
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章