views:

77

answers:

3

In some of its API function Microsoft use the "multi-string" format to specify a list of strings.

As I understand it, a multi-string is a null-terminated buffer of concatenated null-terminated strings. But this can also be interpreted as a list of strings, separated by a null character and terminated by two null characters.

Here comes an example. A list composed of the following items:

"apple", "banana", "orange"

Becomes:

apple\0banana\0orange\0\0

But now I wonder:

How would an empty list be represented ?

Would it be:

\0

Or:

\0\0

I failed to found an accurate documentation that clarifies this. Any clue ?

+4  A: 

\0

dan04
I bet this is your shortest answer ever ;) It perfectly answers my question though. Thank you.
ereOn
I'm a man of few words. If only you could say "It perfectly answers my question though. Thank you." just by clicking a checkmark...
dan04
@dan04: I would already have if I hadn't to wait for 15 minutes to accept an answer ;) (My accept-rate should speak for me actually)
ereOn
So its not possible to have an empty string ("") in such a list?
torak
No, it's not, just like you can't have `\0` inside a C string.
dan04
+2  A: 

It would be \0.

Raymond Chen describes how this works on his blog: the list of strings is terminated by an empty string. If the first string in the list is empty, the list itself is empty.

James McNellis
Yes, that's a great article ;-)
dan04
+2  A: 

If you are working with these, many years ago, I wrote an STL style iterator which works on them:

http://noveltheory.com/iterators/Iterator_N3.htm

James Curran
Very nice, thanks for this.
ereOn