Positional parameters for format strings

これはあれですね。「メモリは writtenになることができませんでした」(うろ覚え)と 根は同じだろうと思います。 まあメモリは〜の方は、カーネルがらみなのでもっと根が深いんですが。

つまり、このようなメッセージをたとえば日本語として自然な順序で出力できるようにするには

printf("%$2d個のファイルが$1sにありました。", v1, v2);

のような、引数の位置を指定できる仕掛けがどうしても必要になるのですが、 VC++のライブラリはこれサポートしてくれてないんですよね。

知らずにスルーしてましたが,その後調べてみたらちゃんとありました.すんません.

#include <cstdio>
#include <atlstr.h>

int main()
{
    const char* pos = "hauhau";
    const int num = 100;

    _printf_p("%2$d個のファイルが%1$sにありました。\n", pos, num);

    CStringA str;
    str.FormatMessage( "%2!d!個のファイルが%1!s!にありました。\n", pos, num);
    puts(str);

    return 0;
}

_printf_p は Visual C++ 2005 で入った模様
下は CString クラスのメソッドですが,中身は FormatMessage API 丸投げ.こいつは少なくとも Windows 95 の時点でサポートされていたはず.