char a[] = "hello world";
you can that because the compiler knows how much space to allocate for the string "hello world."
char a[];
a = "hello world";
C won't allow aggregate assignment; you've got an array of chars and a string, which aren't exactly the same thing. you've also got an unknown size - the compiler doesn't know much space to allocate to a.
char a[80];
strcpy(a, "hello world");
An interesting feature of C though is you can assign structs.
typedef struct {
char a[40];
} test;
test t1 = { "hello world" }, t2 = t1;
puts(t1.a);
puts(t2.a);
HTH