vsscanf - An Implementation for Windows
Posted
by Anuj Seth
on May 20th, 2002
VC++ provides the vsprintf() function but for some strange reason does not provide the complementary vsscanf() function which is available on most Unix systems. The VC++ library defines a static function called input() which is not exposed to end users. This function is exactly what vsscanf() does.
There are two choices that one has:
- Extract the input() source from the VC++ CRT sources and use it in your code.
- Use this alternative implementation
An example usage of vsscanf() (in a Win32 console application with MFC support) is shown below:
#include "stdafx.h" #include "vsscanf.h" CWinApp theApp; using namespace std; // ProcessNumEmailMsgs takes variable number of parameters and // uses vsscanf to parse the parameters. void ProcessNumEmailMsgs(char *input, char *format, ...) { va_list argList; va_start(argList, format); vsscanf(input, format, argList); } int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; // initialize MFC and print and error on failure if (!AfxWinInit( ::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TODO: change error code to suit your needs cerr << _T("Fatal Error: MFC initialization failed") << endl; nRetCode = 1; } else { int startMsg, endMsg, totalMsg; char *input = "Showing 1 - 10 of 100"; char *format = "Showing %d - %d of %d"; // Variable Number of parameters are passed to this // function ProcessNumEmailMsgs(input, format, &startMsg, &endMsg, &totalMsg); printf("Input String: %s\n", input); printf("StartMsg : %d\n", startMsg); printf("EndMsg : %d\n", endMsg); printf("TotalMsg : %d\n", totalMsg); } return nRetCode; }

Comments