鱼C论坛

 找回密码
 立即注册
查看: 3930|回复: 2

C 求助 ,可能有人已经发过了的

[复制链接]
发表于 2013-7-5 20:03:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 butterfly 于 2013-7-5 20:11 编辑

#include <stdio.h>
int main(int argc, char *argv[])
{
char mac[6];
int i;
for(i=0;i<6;i++)
{
  scanf("%x",mac+5-i);
}
for(i=0;i<6;i++)
{
  printf("%x",*(mac+i));
}
return 0;
}

运行结果

运行结果


我同事说 可能是栈覆盖的原因,就是scanf函数的参数本身长度不固定。但是想了很久也没有找到合理的解释。一个是 数组是 short和char型会有问题,而int型则能正确输入,再有就是在单步的时候发现每次会覆盖数组中后面四个值得内容


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-5 20:52:12 | 显示全部楼层
scanf中的%x是以16进制形式进行整数输入。32为系统中,整数占据4个字节,因此每次都将你输入的1
2等数字占据4个字节。也就是说,你说如1的时候,这个1实际上占据了max+5,max+6,max+7,max+8这4个地址,max+5里是1,其它3个地址里都是0;
接着输入2,将占据max+4,max+5,max+6,max+7这4个地址,其中max+4为2,其余的都为0(注意了max+5的1已经被覆盖了)
后面的自己想想吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-5 21:15:32 | 显示全部楼层

谢谢。我自己在琢磨琢磨
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-20 01:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表