this is to do with how one can initialise structures...
Items in initialiser lists must be constant expressions. The string literals "foo" and "more foo" are such constant expressions. strs is not a constant expression so its contents cannot be known at compile time. Therefore the compiler can't use it in an initialiser list.
From C99
All the expressions in an initializer for an object that has static
storage duration shall be constant expressions or string literals.
...
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.
So for example, you can do
char stringy[10] = "a string";
which is equivalent to
char stringy[10] = { 'a', ' ', 's', 't', 'r', 'i', 'n', 'g', '\0' };
You cannot do
char stringy1[10] = "string 1";
char stringy2[10] = stringy1;
The reason for this is that stringy1 resolves to the address of the first byte of the array. So here you are trying to initialise an array with an address, (a char * pointer). C cannot do this... this would involve a memcpy of the contents of stringy2 into stringy1 which the compiler will not do... you have to :)
More crom c99...
...the initializer for an object that has aggregate or union
type shall be a brace enclosed list of initializers for the elements or
named members...
Edit thus for char[] the initialiser list must be a brace enclosed list of chars. The string literal initialiser are just nice syntactic sugar.