问题:
调用
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)]
责任编辑:cyth