A class for double zeroterminated strings

Download Source Code and Example

There are several win32 functions that require the use of a string with embedded NULLs and are terminated with an extra NULL (i will call them DZ strings for short).
An example of such a DZ string: "part1\0part2\0part3\0\0".
To name just a few of functions that work with DZ strings:

  • GetPrivateProfileSection
  • WritePrivateProfileSection
  • SQLConfigDataSource
As most string-functions (strcmp, strchr etc) expect a zeroterminated string, they are of little use when you have to parse a DZ string.
The CString class could be used to manipulate them, but you must be carefull not to call the non-DZ-aware CString-methods (such as Right(), Mid(), Left(), Replace() and Find()).
I decided to create a class that helps constructing and parsing those DZ strings. The class is called CDoubleZeroString and is not derived from CString.

An example how to use this class:
	CDoubleZeroString dz;
	dz.Add("a=1"); // add a zeroterminated 'part'
		// operator(const char*)  will return "a=1\0b=2\0c=3\0\0"
	WritePrivateProfileSection("humbug", dz, ".\\humbug.ini");
	char	buffer[1024];
	GetPrivateProfileSection("humbug", buffer, sizeof buffer, ".\\humbug.ini");
		// cleanup dz
		// AddDoubleZero will parse buffer
		// print the outcome
	for(int i=0;i<dz.GetCount();i++)
		cout << dz.Get(i) << endl;
	CString test = dz;
	cout << "cstring " << test << endl;
This will show the following output:
cstring a=1

The CString test will only copy the first substring when it is constructed...
If you want to implement this using CString you would have to do something like:
	CString	dz("a=1\0" "b=2\0" "c=3\0" "\0", 13);
	   // or some prefer:
	CString dz("a=1@b=2@c=3@@");
	int pos;
	   // note that you MUST use ReverseFind (not Find) for this to work
		dz.SetAt(pos, '\0');

Last updated: August 17, 1998


  • hi

    Posted by lexito on 05/23/2008 11:04am

    how can you display ex. 234578E, in parts of as
      when it is pases to a function

  • Or you could just use std::string...

    Posted by Legacy on 08/09/2002 12:00am

    Originally posted by: DrPizza

    ... which is a counted string, not a null-terminated string.

  • How about a C version?

    Posted by Legacy on 11/21/2000 12:00am

    Originally posted by: David Duncan Ross Palmer

    Are you a C++ programmer who hates C?
    If not how about a C version of this, that would be useful.

    For example a structure of pointers to C functions and of course manually passing >this< pointers. Or alternatively non-OOP altogether such as a library of functions for dealing with these types of strings.

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

Top White Papers and Webcasts

  • On-demand Event Event Date: September 23, 2015 The cloud is not just about a runtime platform for your projects – now, you can do your development in the cloud, too. Check out this webcast to learn how the cloud improves your development experience and team collaboration. Join Dana Singleterry, Principal Product Manager for Oracle Dev Tools, as he discusses how to simplify every aspect of the development lifecycle, including requirements gathering, version management, code reviews, build automation, and …

  • Lenovo recommends Windows 8 Pro. "I dropped my laptop getting out of the taxi." This probably sounds familiar to most IT professionals. If your employees are traveling, you know their devices are in for a rough go. Whether it's a trip to the conference room or a convention out of town, any time equipment leaves a user's desk it is at risk of being put into harm's way. Stay connected at all times, whether at the office or on the go, with agile, durable, and flexible devices like the Lenovo® …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date