关于printf函数的一些理解

2014-11-23 17:51:31 · 作者: · 浏览: 37

  问题:


  调用


  printf("%.1f%s",0.0,"a");


  的输出是


  0.0a


  而调用


  printf("%.1f%s",0,"a");


  的输出是


  0.0@


  第二个输出的字符并不是“a”(ASCII码97),而是“@”(ASCII码64),在VC 6下。


  为什么?具体原因。


  解答:


  1,查看两句话的反汇编1)  printf("%.1f,%s", 0.0,"a");


  004113BE mov   esi,esp


  004113C0 push offset string "a" (41581Ch)


  004113C5 sub   esp,8


  004113C8 fldz


  //将0.0压入到st(0)中


  004113CA fstp qword ptr [esp]


  //将st(0)中的内容存放到qword ptr [esp]指定的位置(4*4个字节=8个字节)


  004113CD push   offset string "%.1f,%s" (415800h)


  004113D2 call dword ptr [__imp__printf (4182BCh)]