On linux you could just use "%m$s", where m is the variable position (starting with 1), e.g. "%2$s" prints the second variable as string (see 'man 3 printf' for more details). Be aware that this isn't part of any C standard, only standardized in POSIX 2001. This most likely won't work on windows when built with Visual Studio (mingw or cygwin might work).
Gettext solves this problem by using an internal printf if the native libc doesn't support it (probably just a define in libintl.h).