Re: reading / writing a string
On Dec 3, 8:44 pm, Jeff Schwab <j...@schwabcenter.com> wrote:
Fred wrote:
On Dec 3, 7:54 am, Jeff Schwab <j...@schwabcenter.com> wrote:
fprintf(stream, "%s%s", IC.StringA, IC.StringB);
Here, you write the strings back-to-back, without any
intervening whitespace. When you try to read the strings
back into your program, the whole sequence will be mistaken
for one string. You could try inserting a space, so that
the format string is "%s %s".
This still will not work if either of the strings contains
embedded whitespace.
Good point. That did not occur to me.
It's a general problem when serializing in text format.
Choosing a separator for most types is fairly trivial, however;
there are lots of characters which can't show up in the string
representation an int or a double. (But it still requires some
thought---the C++ standard for formatting a complex regretfully
uses a separator which can occur in a double, which means that a
standard conforming implementation is totally useless.) For
strings in general, it's a bit more complicated. Most strings,
however, have a semantic, e.g. family name, or something like
that, which will forbid some characters, and thus allow a
separator; if not, I've written a ParsableString class which
ensures round trip serialization, roughly by using the
conventions for C++ string literals: in quotes, with quotes and
unprintable characters escaped.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34