Messages in this thread | | | Date | Thu, 02 Aug 2007 15:42:29 -0600 | From | Robert Hancock <> | Subject | Re: gcc fixed size char array initialization bug - known? |
| |
Guennadi Liakhovetski wrote: > On Thu, 2 Aug 2007, Andi Kleen wrote: > >> Guennadi Liakhovetski <g.liakhovetski@gmx.de> writes: >> >>> char c[4] = "0123"; >>> and - a wonder - no warning. >> It's required by the C standard. >> >> 6.7.8.14 of C99: >> `` >> An array of character type may be initialized by a character string literal, optionally >> enclosed in braces. Successive characters of the character string literal (including the >> terminating null character if there is room or if the array is of unknown size) initialize the >> elements of the array. >> '' >> >> Note the "if there is room". >> >> I believe the rationale is that it still allows to conveniently initialize >> non zero terminated strings. > > Right, I accept that it will compile, but I don't understand why "01234" > produces a warning and "0123" doesn't? Don't think C99 says anything about
Because 5 characters will not fit in a 4 character array, even without the null terminator.
> that. And, AFAIU, using structs with fixed-size char array we more or less > rely on the compiler warning us if anyone initializes it with too long a > string. > > Also interesting, that with > > char c[4] = "012345"; > > the compiler warns, but actually allocates a 6-byte long array... > > Thanks > Guennadi
-- Robert Hancock Saskatoon, SK, Canada To email, remove "nospam" from hancockr@nospamshaw.ca Home Page: http://www.roberthancock.com/
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |