String literals are specified to be unmodifiable in C.
And from the C99 rationale document:
"This specification allows implementations to share copies of strings with identical text, to place string literals in read-only memory, and to perform certain optimizations"