Replacement for vsscanf on msvc
c, c++, visual-c++
Solution
A hack that should work:
int vsscanf(const char *s, const char *fmt, va_list ap)
{
void *a[20];
int i;
for (i=0; i<sizeof(a)/sizeof(a[0]); i++) a[i] = va_arg(ap, void *);
return sscanf(s, fmt, a[0], a[1], a[2], a[3], a[4], a[5], a[6], /* etc... */);
}
Replace 20 with the max number of args you think you might need. This code isn't terribly portable but it's only intended to be used on one particular broken system missing `vsscanf` so that shouldn't matter so much.
Problem
I've run into an issue porting a codebase from linux (gcc) to windows (msvc). It seems like the C99 function vsscanf isn't available and has no obvious replacement. I've read about a solution using the internal function _input_l and linking statically to the crt runtime, but unfortunately I cannot link statically since it would mess with all the plugins (as dlls) being loaded by the application. So is there any replacement or a way to write a wrapper for vsscanf? Update 2016-02-24: When this was first asked there was no native replacement but since then MSVC has implemented support for this and much more. - VS2013 and later implements `vsscanf` and friends. - C++11 includes support as well.