dcsimg
 

A class for double zeroterminated strings

Saturday Aug 22nd 1998 by Gert Rijs

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'
	dz.Add("b=2");
	dz.Add("c=3");
		// 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
	dz.Empty();
		// AddDoubleZero will parse buffer
	dz.AddDoubleZero(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:
a=1
b=2
c=3
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
	while((pos=dz.ReverseFind("@"))!=-1)
		dz.SetAt(pos, '\0');

Last updated: August 17, 1998

Home
Mobile Site | Full Site
Copyright 2018 © QuinStreet Inc. All Rights Reserved