printf()的一些小问题

来源:互联网 发布:hao123解压软件 编辑:程序博客网 时间:2024/05/04 12:44

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的内存里面存放的是0x30pirntf("%c",a);

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

而不是

    char a=0;//这样屏幕上什么都没有输出,因为ASCII表的0代表的是NULL,内存空间里面存的是0    printf("%c\n",a);
0 0
原创粉丝点击