大家看看这道题

luotuo44 2011-03-27 11:07:13
#include<stdio.h>
#include<string.h>

int main()
{
char d[]="456789";
char s[]="123";

strcpy(s,d);
printf("%s\n%s\n",d,s);

return 0;
}
为什么输出是
89
456789
...全文
193 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzc543806053 2011-03-28
  • 打赏
  • 举报
回复
s的实质越界了
無_1024 2011-03-27
  • 打赏
  • 举报
回复
看地址 s的实质越界了 占用了d的地址段 这样d的部分字符就被s覆盖了
Bluebird34 2011-03-27
  • 打赏
  • 举报
回复
我不懂
無_1024 2011-03-27
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<string.h>

int main()
{
char d[]="456789";
char s[]="123";
printf("%s\n",d);
strcpy(s,d);
printf("%x %x \n",&d,&s);
printf("%s\n%s\n",d,s);

return 0;
}
//地址覆盖了
pengzhixi 2011-03-27
  • 打赏
  • 举报
回复
额,想strcpy这种函数第一个参数能否有足够的空间容下第2个参数里面所包含的元素,这个应该是程序员来保证
昵称很不好取 2011-03-27
  • 打赏
  • 举报
回复
s越界以后把d中数据给覆盖了
晓馨嫣梓 2011-03-27
  • 打赏
  • 举报
回复
strcpy之后为:
"4 5 6 7 8 9 \0 7 8 9 \0"

s在栈顶,前4位,d是后7位
晓馨嫣梓 2011-03-27
  • 打赏
  • 举报
回复
s越界以后把d中数据给覆盖了
厉害~一语中的!!!
"1 2 3 \0 4 5 6 7 8 9 \0"
从左往右为低位至高位排列;
这样清晰很多了
宁谧青风 2011-03-27
  • 打赏
  • 举报
回复
越界了
zpf290079626 2011-03-27
  • 打赏
  • 举报
回复
怎么会呢?我输出的还是456789啊
jialejiahi 2011-03-27
  • 打赏
  • 举报
回复
数组越界后出现什么情况都不要惊讶。
我们的任务保证不要出现数组越界。
另外顶三楼!

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧