C const-correctness: attempting to modify a string literal through a const char* return value\n\n#include<stdio.h>\nconst char *fun();\n\nint main()\n{\n *fun() = 'A';\n return 0;\n}\nconst char *fun()\n{\n return "Hello";\n}

Difficulty: Easy

Correct Answer: Error: fun() returns a pointer const character which cannot be modified

Explanation:


Introduction / Context:
This question checks whether you can write through a pointer to const data returned by a function. The code dereferences the returned pointer and assigns a character, attempting to mutate a string literal.



Given Data / Assumptions:

  • fun returns const char * to the literal "Hello".
  • main executes fun() = 'A';
  • String literals are not modifiable.


Concept / Approach:
A string literal has static storage and is non-modifiable. Returning a const char correctly advertises immutability. Dereferencing that pointer as an lvalue target of assignment violates const and, if forced, would lead to undefined behavior.



Step-by-Step Solution:
fun() → const char * to "Hello".*fun() is a const-qualified char lvalue.Assigning 'A' attempts to modify read-only memory → compile-time error in strictly conforming compilers.


Verification / Alternative check:
Change fun to return char * but still return a literal: some compilers allow compilation but crash at runtime. Correct approach: copy into a writable array first.



Why Other Options Are Wrong:
“Rvalue/Lvalue required” do not precisely address const immutability. “No error” is wrong in standard-conforming code; writing to a literal is invalid.



Common Pitfalls:
Forgetting const on function returns; writing into string literals; assuming dereferencing a pointer always yields a modifiable lvalue.



Final Answer:
Error: fun() returns a pointer const character which cannot be modified

Discussion & Comments

No comments yet. Be the first to comment!
Join Discussion