wsprintfA/wvsprintfA と_vsnprintf の動作が違う!?

拡張カーネル v2.0b以降では wsprintfA/wvsprintfA と wsprintfW/wvsprintfW の処理を
msvcrt.dllの _vsnprintf / _vsnwprintf を使った 文字出力を行ってるのですが
どうも、 user32.dll の処理と違う部分があるようです。

というのは、以下のような場合

構文 msvcrt.dll user32.dll
wsprintf("%#x",1041) 0x411 0x411
wsprintf("%#x",0) 0 0x0
wsprintf("%#04x",1041) 0x411 0x0411

なんてことでしょう
Σ(・ω・;)

というか、このせいで、 Install Shield の一部のバージョンがこけてるみたいです。
なんとなく、msvcrt.dll のバグ臭くもあるわけですが。

Windows Vista の msvcrt.dll や VC++2010の msvcr100.dll で試してみましたが、同じ結果に・ω・;
仕様違いっていやらしいですね

おすすめ

1件の返信

  1. egtra より:

    _vsnprintf / _vsnwprintfのその挙動は、プログラミング言語Cの仕様として決まっているので、それで正しいのです(正確にはsnprintf / swprintfなど、下線で始まらないprintf群についての仕様ですが)。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です