By accident I found that the line char s[] = {"Hello World"};
is properly compiled and seems to be treated the same as char s[] = "Hello World";
. Isn't the first ({"Hello World"}
) an array containing one element that is an array of char, so the declaration for s should read char *s[]
? In fact if I change it to char *s[] = {"Hello World"};
the compiler accepts it as well, as expected.
Searching for an answer, the only place I found which mentioned this is this one but there is no citing of the standard.
So my question is, why the line char s[] = {"Hello World"};
is compiled although the left side is of type array of char
and the right side is of type array of array of char
?
Following is a working program:
#include<stdio.h>
int main() {
char s[] = {"Hello World"};
printf("%s", s); // Same output if line above is char s[] = "Hello World";
return 0;
}
Thanks for any clarifications.
P.S. My compiler is gcc-4.3.4.