Extending CStringArray | CodeGuru

Extending CStringArray

Environment: VC6 SP3, NT4 SP4 One of the reasons I left C and began to use C++ was CString and even more so CStringArray. These two classes are worth all the other aggravation when going OO. I don’t claim that they are perfect. There are things missing in both of those classes and I would […]

Written By
CodeGuru Staff
CodeGuru Staff
Jan 15, 2000
2 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Environment: VC6 SP3, NT4 SP4

One of the reasons I left C and began to use C++ was CString and even more so CStringArray. These two classes are worth
all the other aggravation when going OO. I don’t claim that they are perfect. There are things missing in both of
those classes and I would like to share this extension of CStringArray that I have made.

Finding an string in a CStringArray

One of the things that I think are missing in CStringArray is a Find method. I find myself wanting to get a specific string out of the array
and I know part, or the whole, of it. Not the position in the array. So I added this method. It is very straight forward and uses
CString::Find to find the string.

Example:

 meStringArray arr;

 // fill the array with strings using the normal Add()
 arr.Add("This is a String");
 arr.Add("The second string");
 arr.Add("the 3:rd string");

 // find the third string
 int i=arr.Find("3:rd");

 // i is now 2
 CString sBuf;

 sBuf=arr.GetAt(i);

 // sBuf has now the value of "the 3:rd string"

Array of NULL terminating strings

Some SDK-functions and some classes still using an array of NULL terminating strings. e.g. CFileDialog uses this kind of array
for the filters. GetProfileString(“section”,NULL,””,buf,sizeof(buf)); also uses it, and there are many more. So every time you need to use
this class/function you have to go back to C and do a lot of loops. Well I finally got tired of it and extended CStringArray with two methods;
AddBuf() and GetBuf(). The first will take an array of NULL terminating strings and add it to the StringArray, and the second will do the reverse

Example GetBuf:

 CFileDialog dlg;
 meStringArray filter;

 // init filter
 filter.Add("All files");
 filter.Add("*.*");
 filter.Add("Doc files");
 filter.Add("*.doc");
 filter.Add("Text files");
 filter.Add("*.txt");

 // Init file dialog
 dlg.m_ofn.lpstrFilter=filter.GetBuf();
 dlg.m_ofn.lpstrInitialDir=initDir;
 dlg.m_ofn.Flags |= OFN_SHAREAWARE;
 int rc=dlg.DoModal();
 if(rc==IDOK)
 {
  m_filepath=dlg.GetPathName();
  UpdateData(FALSE);
 }

Example AddBuf:

 meStringArray arr;
 char buf[1024];

 // Get all printer names
 GetProfileString("devices",NULL,"",buf,sizeof(buf));

 // add them to the array
 arr.AddBuf(buf);

 // Get the second printer name from the array
 CString sPrintName = arr.GetAt(2);

Well that’s it! It’s not a very large class so there is not so much to say.
I hope that someone will find use for this and PLEASE let me know what you think!
This is the first class I ever published so please say what you think about it, good, bad.

Advertisement

Downloads

Download source – 2 KB

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.