On 2008-10-24 16:29:45 -0400, "Default User" <defaultuserbr@yahoo.com> said:
Pete Becker wrote:
On 2008-10-24 12:49:25 -0400, Victor Bazarov
<v.Abazarov@comAcast.net> said:
The only reason it could be crashing is if the compiler wastn't
providing proper initialisation for the array. What you could do
is revert this to what it was and put an assertion to see if it's
indeed the problem:
unsigned char myString[200] = "";
#ifndef NDEBUG
for (int iii = 0; iii < 200; ++iii)
ASSERT(myString[iii] == 0);
#endif
Hmm, is this required if the char array has automatic storage
duration? I have always assumed that it wasn't, that only the
characters corresponding to characters in the initializer would be
initialized, but it doesn't seem completely clear from a quick glance
at the standard.
Interesting. I also didn't find anything explicit regarding string
literals, just the usual "fewer initializer" rule:
If there are fewer initializers in the list than there are
members in the aggregate, then each member not explicitly
initialized shall be value-initialized (8.5).
The C standard does contain such wording (assuming that it didn't
change from the draft standard):
[#21] If there are fewer initializers in a brace-enclosed
list than there are elements or members of an aggregate, or
fewer characters in a string literal used to initialize an
array of known size than there are elements in the array,
the remainder of the aggregate shall be initialized
implicitly the same as objects that have static storage
duration.
C89's wording was similar to the C++ standard, but had further examples
to show that initialization with a string literal is identical to a
brace-enclosed list of the characters, which would amount to the same
thing.
So C99 made it crystal clear, presumably because C90 wasn't. <g>
Roundhouse Consulting, Ltd. (www.versatilecoding.com) Author of "The