printf()的一些小问题

c编程的printf()函数看起来比较简单,但是还是有很多的小陷阱值得注意的。
最近用到了printf(),并且发现了自己以前没有遇到的小问题,为此,分享下。
1、

char a=198;//明显超过了127的限制了
printf("%d",a);//如果修饰符选为%d时候是怎么输出的呢


如上,最后显示的是-58。原因是char 型变量a的内存地址里面存放着198即1100 0110,见下图的内存。

所以当以%d的形式来读取时候,1100 0110就会被当做是补码的形式,所以会被当做是-58。(可以自己计算一下,原码为-58,补码是0xC6,即 1100 0110)。
所以归根到底,printf()函数的输出问题还是要从内存分析。当格式修饰符不匹配时候,要看看内存存放的是什么,然后是以什么方式读取的,在这一点上要注意。

2、注意%c修饰符读入的都为ASCII码,如果想在屏幕上输出数字0;
那么应该是这样的

char a='0';//a的内存里面存放的是0x30
pirntf("%c",a);

查看内存空间确实是0x30,也就是数字0对应的ascii码值。

而不是

    char a=0;//这样屏幕上什么都没有输出,因为ASCII表的0代表的是NULL,内存空间里面存的是0
    printf("%c\n",a);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值