Q: If you can't assign to arrays, then how can
int f(char str[]) { if(str[0] == '\0') str = "none"; ... }work?
A: In this code, str is a function parameter, so its declaration is rewritten by the compiler as described in question 6.4. In other words, str is a pointer (of type char *), and it is legal to assign to it.