Wireshark-dev: Re: [Wireshark-dev] Sprintf weirdness

From: Guy Harris <guy@xxxxxxxxxxxx>
Date: Wed, 2 Jun 2010 01:57:46 -0700
On Jun 1, 2010, at 10:10 PM, Ian Schorr wrote:

> As you mention later, MS Visual Studio 2008 does not include those
> macros.  From the sounds of it, regardless of my exact problem (which
> I'm guessing is in this general area anyway), I'm probably better off
> abandoning sprintf altogether?

If you have guint32 and guint64 as types, you're presumably using GLib, in which case you have GStrings:

	http://library.gnome.org/devel/glib/stable/glib-Strings.html

which means you can allocate a GString, use g_string_printf() to initially format it, and use g_string_append_printf() to format and append to it; there aren't any worries about overflowing it, as it grows as necessary, or about conveniently appending to it.

If you use that, you'd use G_GINT64_MODIFIER in the format, e.g.

	GString *string;
	guint64 longlong;

		...

	g_string_printf(string, "longlong = " G_GINT64_MODIFIER "u", longlong);

That's available on all platforms, so you don't have to worry about whether the platform has the PRI[douxX]64 macros or not.