码迷,mamicode.com
首页 > 其他好文 > 详细

C之printf()函数

时间:2015-01-30 17:39:22      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

  在C语言中,printf()是最常用的输出函数。printf()的使用很简单,如要打印Hello,World!这个字符串,只需运行:

 

printf("Hello,World!");

这样就会在屏幕上输出hello,World!这个字符串。

  printf不仅可以输出常量,还可以输出变量。如要打印上面的字符,还可以:

#include<stdio.h>
#define HW "Hello,World!"
int main(void)
{
      printf("%s", HW);
      return 0;      
}

其中"%s"是一个转换说明符,表示将要输出的是一个字符串,后面的HW则是要打印的字符串。

  使用这种方式,在printf中可以使用多个转换说明符,需特别注意的是,""(双引号)中转换说明符的个数和类型必须与后面的参数完全一致,否则可能会不能输出或得不到想要的结果。

  这里有一个情况需特别注意,先看下面的程序:

 

 #include<stdio.h>
  
  int main(void)
  {
          float n1 = 123.45;
          float n2 = 456.78;
          long n3 = 12000000;
          long n4 = 34000000;
  
          printf("n1 = %ld, n2 = %ld, n3 = %ld, n4 = %ld\n", n1, n2, n3, n4);
          return 0;
  }

在这段代码中,试图使用转换说明符%ld打印float型和long型数据,其输出结果为:

n1 = -1073741824, n2 = 1079958732, n3 = -536870912, n4 = 1081904250

其结果完全错误。这中错误与printf()函数的打印过程有关,下面重点介绍。

  当执行上面的printf那一句时,后面的n1,n2,n3,n4这4个参数被传送到内存中的堆栈中,但是,float型数据会被当做double型处理,即占8个字节,而long型占4个字节。而打印数据时则是根据转换说明符的类型决定。由于上面都使用了%ld即long型的转换说明符,在打印n1时实际从堆栈中取出的是n1的前4个字节,并将其转换成一个long型数据输出。打印n2时实际取出的是n1的后4个字节。以此类推,在打印n3,n4时,虽然转换说明符匹配(都是long型),但实际取出的是n2的前4和后4个数据并输出,所以结果是完全错误的。

C之printf()函数

标签:

原文地址:http://www.cnblogs.com/msing/p/4262590.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!