Yes, this declaration is bad practice, because it allows many ways of accidentally provoking Undefined Behavior by writing to a string literal, including:
cool[0] = 'k';
strcpy(cool, "oops");
On the other hand, this is perfectly fine, since it allocates a non-const array of chars:
char cool[] = "cool";