|
发表于 2018-8-15 17:34:58
|
显示全部楼层
本帖最后由 关键是感觉 于 2018-8-15 17:55 编辑
printf("%f,%f\n",20/7,-20.0/7);
这个错误是因为堆栈错了
printf("%f,%f\n",-20.0/7,20/7);这样就行了
printf("%f,%f\n",20/7,-20.0/7);
00401028 push 0C006DB6Dh
0040102D push 0B6DB6DB7h
00401032 push 2
00401034 push offset string "%f,%f\n" (0042601c)
00401039 call printf (00401070)
0040103E add esp,10h
我理解是-20.0/7传入了2个参数。
00401028 push 0C006DB6Dh
0040102D push 0B6DB6DB7h
而第二个20/7结果是2
在%f的时候,需要取2个参数。所以数据不对应。导致错误
已经确定了,在打印浮点数的时候。会传入2个参数。
float f=1.2;
00401046 fld dword ptr [ebp-4]
00401049 sub esp,8
0040104C fstp qword ptr [esp]
0040104F push offset string "%f,%f\n" (0042601c)
00401054 call printf (00401070
这里可以说明。
printf("%f",f);.
以上传入f的时候。会分2次传入参数。esp-8可以看出。printf在使用参数的时候也会这样去理解。
这样也可以验证我以上表达的意思
一:float f=1.2;
printf("%d %d %d\n",f,20/7);
二: printf("%f\t%f\n",20/7,1,1.7);
|
|