Chaves em torno de string literal na declaração de matriz de caracteres válida? (por exemplo, char s [] = {“Hello World”})
Por acaso, descobri que a linhachar s[] = {"Hello World"};
está devidamente compilada e parece ser tratada da mesmachar s[] = "Hello World";
. Não é o primeiro ({"Hello World"}
) uma matriz contendo um elemento que é uma matriz de char, portanto, a declaração para s deve ser lidachar *s[]
? Na verdade, se eu mudar isso parachar *s[] = {"Hello World"};
o compilador aceita também, como esperado.
Procurando por uma resposta, o único lugar que encontrei que mencionou isso éeste mas não há citações do padrão.
Então, minha pergunta é: por que a linhachar s[] = {"Hello World"};
é compilado embora o lado esquerdo seja do tipoarray of char
e o lado direito é do tipoarray of array of char
?
A seguir está um programa de trabalho:
<code>#include<stdio.h> int main() { char s[] = {"Hello World"}; printf("%s", s); // Same output if line above is char s[] = "Hello World"; return 0; } </code>
Obrigado por quaisquer esclarecimentos.
P.S. Meu compilador é gcc-4.3.4.