vsscanf – An Implementation for Windows

CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More.

Environment: VC++ 6.0, Windows 9x/ME/NT/2000

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

Several C++ implementations exist to plug this hole but most of them do not provide the identical API available on Linux. This implementation enhances the CStringEx::Scanf extension written by Rainer Bauer to provide an identical API to that which is available on Linux.

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: %sn”, input);
printf(“StartMsg : %dn”, startMsg);
printf(“EndMsg : %dn”, endMsg);
printf(“TotalMsg : %dn”, totalMsg);
}

return nRetCode;
}

Downloads


Download source and demo project – 12 Kb

More by Author

Get the Free Newsletter!

Subscribe to Developer Insider for top news, trends & analysis

Must Read