Re: Is this type of char array initization legal?
DomoChan@gmail.com wrote:
the code below will compile in visual c++ 2003, but im not sure its
valid.
unsigned char myString[200] = "";
after this line executes, all the bytes within myString are indeed set
to '0's' but is this really valid c++ or c? where can I find out how
this is implemented?
Im concerned because I had a 3rd party library wrapper which was
crashing, and I was able to alleviate the crash by changing the
initialization method from the above to ...
unsigned char myString[200];
memset( myString, 0, sizeof( myString ) );
any guidance is greatly appreciated!
-Velik
It is valid. Allowed explicitly by the Standard, subclause 8.5.2.
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
Now, if you are saying that you verified that all elements of the array
are indeed set to 0 after the initialisation, then it's OK, and the
crash is due to some other problem which you just *hid* by introducing
your 'memset' "fix", most likely.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask