Initializing arrays of char

Andy DeFaria defaria at hpclapd.HP.COM
Sat Oct 6 02:49:29 AEST 1990


>/ hpclapd:comp.lang.c / poser at csli.Stanford.EDU (Bill Poser) /  6:16 pm  Oct  4, 1990 /
>Regarding the assignment of "12345" to char x[5] and struct{char x[5]},
>I spoke too soon. K&R2 contains a detail I hadn't noticed, and am not
>sure that I approve of. On p.219, in the discussion of initialization
>of fixed size arrays by string constants, it states:
>
>	...the number of characters in the string, NOT COUNTING
>	THE TERMINATING NULL CHARACTER, must not exceed the
>	size of the array. [emphasis mine]
>
>This means that the assignment of "12345" to an array of five characters,
>is legal. If K&R2 here reflects the standard, then both initializations
>are legitimate.
>
>This seems to me to be a bad idea. Everywhere else, one has to take
>into account the terminating null. For example, x[5] = 'a' is
>an error. Not counting the terminating null here is inconsistent.
>Can anyone explain this decision?
>----------

It seems to me (and I am be no stretch of the imagination a  C expert) that
K&R C is saying "Sure you can use all 5 characters for a legitimate string.
You can manipulate them any way you want.  You might be using it to contain
a fixed length string of 5 characters.  But don't you  ever  try  to use it
with any string procedures (strlen, or even printf's %s operator) or expect
to get burned!"



More information about the Comp.lang.c mailing list