No, not in the general case. Use vector<char> c(n) instead.
Simplified, almost correct explanation: if you don't know what n is at compile time, neither does the compiler. So it cannot put aside memory for the array. This is why vector exists.
You can always use &c[0] to get the pointer to char if you need it elsewhere.
But it is possible in C99, apparently. Thanks to @Matt McNabb for pointing this out. If you can wait a few years you might be able to compile it in C++, too. In the meanwhile, use vector.
If you insist to have an "array" in C++, you would have to do something like:
char* c = new char[n];
If your program does not run forever, or do this too often, you can even just leave it as it is and not bother deleting. Tools like Valgrind might complain though.
vectorwould be a better alternative.