gets函数有问题?

来源:互联网 发布:淘宝上卖盗版书的店铺 编辑:程序博客网 时间:2024/05/17 02:39

最近在学习gets函数时,遇到了一点小问题,当时有点想不通,代码如下:


#include <stdio.h>int main(){char a,b,c,d,e,f;printf("%p\t%p\n",&a,&f);gets(&a);putchar(a);putchar(b);putchar(c);putchar(d);putchar(e);putchar(f);return 0;}



执行结果是这样的:


我的本意是知道了一段内存的首地址,就可以使用gets函数输入数据,可是输出的结果

却出乎我的初衷。理论上,我输入“123456”,他应该正序输出“123456”,为什么结果

却是“134562”。起初,我以为是gets函数出了问题,可是我写了以下代码,就恍然大悟了!


#include <stdio.h>int main(){char a,b,c,d,e,f;gets(&a);putchar(a);putchar(b);putchar(c);putchar(d);putchar(e);putchar(f);putchar('\n');return 0;}

编译后执行结果是:



这是按照正常情况输出了,所以说,gets函数是没有问题的。问题主要是在那个printf语句,
大家知道,在c中,局部变量实际使用时分配内存的,声明时是不分配内存的。所以第一个
程序使用了printf打印了变量a和f的地址,所以在gets之前,我们发现,他们的地
址是连续的。所以说,gets函数把第一个,第二个数据分别存储到变量a和f中,在
之后,才把后面的数据依次存储到剩余的变量当中。明白了这些,我写了另一个例子:


#include <stdio.h>int main(){char a,b,c,d,e,f;printf("%p\t%p\t%p\n",&a,&b,&f);gets(&a);putchar(a);putchar(b);putchar(c);putchar(d);putchar(e);putchar(f);return 0;}


执行结果如下:
 


正验证了我的想法,呵呵 微笑



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信不记得帐号了?怎么办? 熊猫麻将ip一样怎么办 公积金代扣失败怎么办 信用账户中签了怎么办 大话西游账号忘记了怎么办 网易云忘记账号怎么办 校园网登录不上怎么办 wifi名称隐藏了怎么办 玩游戏不能全屏怎么办 方舟手机版回档怎么办 进京证审核中怎么办 美篇审核中怎么办 视频不能转码怎么办 文件太大上传不了怎么办 数据库添加日志错误怎么办 桌面计算机图标不见了怎么办 qq空间封闭了怎么办 血小板600多怀孕怎么办 干活要不到工钱怎么办 银联手机号换了怎么办 深圳个体户工商年检怎么办 三个人合伙怎么办执照 两个人合伙怎么办执照 单位公章坏了怎么办 公章外壳坏了怎么办 公司变更名称银行怎么办 公司被起诉了怎么办 微信限制搜索怎么办 微博vip改不了怎么办 改不了微信号怎么办 修改不了微信号怎么办 触屏自检失败怎么办 微信名片加不上怎么办 微信号不是手机号怎么办 qq被盗号了怎么办 不知道对方名字怎么办 qq密码找不到了怎么办 好朋友跟你告白怎么办 感情破裂没证据怎么办 在微信里找不到昵称怎么办 营业执照副本丢了怎么办