GPF when using stl string (typically in printf, wprintf, fprintf, fwprintf, sprintf, swprintf, _snprintf, _snwprintf, _vscprintf, _vscwprintf)

It is possible to get an Unhandled exception 0xC0000005 when using stl string objects returned from generated objects. The problem is typically noticed when using printf, wprintf, fprintf, fwprintf, sprintf, swprintf, _snprintf, _snwprintf, _vscprintf, _vscwprintf family of instructions e.g.
printf("DVD Title = %s\n", dvd->GetTitle());

where dvd->GetTitle() returns an stl string.

The Problem
Because std::tstring is just the standard stl string hiding behind a typedef, we get a problem that is quite common, and not imediatley obvious what the cause is.

The stl string class does not have a const char* cast operator, so it can't be used as if it were a C++ string. Because of this when it is used within printf (or a similar function), the printf function attempts to treat it as a const char* (which it is not), and this causes problems that lead to a GPF (typically in output.c).

A reference to a const char * can be obtained from a stl string using the c_str() method. Use this method whenever you expect the stl string to be treated as a const char * (i.e. when used in printf etc.).
printf("DVD Title = %s\n", dvd->GetTitle().c_str());
Applies To
All Builds of Liquid XML DataBinder, when using Microsoft Visual C++ (all Versions)

Add Feedback