昨天晚上寫一個小Demo,要把新加的一個浮點變量顯示在屏幕上。因爲我懶得調位置了,所以直接把原來顯示另外一個參數的代碼改一下拿來用,結果發現無論如何都打不出來。
踫到這種printf的東西,我第一反應就是指針啦堆棧啦之類的問題,所以我把相關的東西搬到程序的開頭去執行,然後打個斷點看結果。發現%f還是不起作用,直接把我的%吃掉了,顯示一個f出來。
後來着急回家,也沒有細究,用另外一個方法把這個問題繞過去了。
今天細究了才發現,原來原來那個代碼用的是wsprintf,我平時用的是swprintf……這兩個有什麽區別呢?wsprintf其實是一個宏,對應著兩個Windows API:wsprintfA和wsprintfW。最前面的那個w,不是寬字符(wide)的“w”,而是Windows的“w”。而swprintf是sprintf的寬字符版,是C的標準輸入輸出。而造成這個問題的原因,則在於windows的wsprintf,並不支持浮點數……
好吧。有空可以查一下,爲什麽Windows要搞這個API出來,爲什麽這個API還不支持浮點數……
发表回复