vsscanf - An Implementation for Windows

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: %s\n", input);
    printf("StartMsg    : %d\n", startMsg);
    printf("EndMsg      : %d\n", endMsg);
    printf("TotalMsg    : %d\n", totalMsg);
  }

  return nRetCode;
}

Downloads

Download source and demo project - 12 Kb


Comments

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: December 11, 2014 @ 1:00 p.m. ET / 10:00 a.m. PT Market pressures to move more quickly and develop innovative applications are forcing organizations to rethink how they develop and release applications. The combination of public clouds and physical back-end infrastructures are a means to get applications out faster. However, these hybrid solutions complicate DevOps adoption, with application delivery pipelines that span across complex hybrid cloud and non-cloud environments. Check out this …

  • With the average hard drive now averaging one terabyte in size, the fallout from the explosion of user-created data has become an overwhelming volume of potential evidence that law-enforcement and corporate investigators spend countless hours examining. Join Us and SANS' Rob Lee for our 45-minute webinar, A Triage and Collection Strategy for Time-Sensitive Investigations, will demonstrate how to: Identify the folders and files that often contain key insights Reduce the time spent sifting through content by …

Most Popular Programming Stories

More for Developers

RSS Feeds