In C, printf return value in an if-condition with an empty C-string literal element. #include<stdio.h> int main() { int i; char a[] = "\0"; /* a[0] == 0, array is a valid empty string */ if (printf("%s", a)) printf("The string is empty "); else printf("The string is not empty "); return 0; }

Difficulty: Medium

Correct Answer: The string is not empty

Explanation:


Introduction / Context:
This tests a subtle C behavior: printf returns the number of characters printed. When you pass an empty string to printf("%s", a), nothing is printed, and printf returns 0. The if-condition uses that return value directly.



Given Data / Assumptions:

  • a is an array with the contents "\0". It is a valid empty C-string (first char is 0).
  • printf("%s", a) prints zero characters and returns 0.
  • The if-else chooses the branch based on this return value.


Concept / Approach:
In C, printf returns an int: the count of characters printed (or a negative value on error). Therefore, if (printf(...)) executes the then-branch only if at least one character was printed. For an empty string, it will execute the else-branch.



Step-by-Step Solution:
Evaluate printf("%s", a) with a = "" → prints nothing → returns 0.Condition if (0) is false → else-branch runs.Program prints: "The string is not empty".


Verification / Alternative check:
Change a to "X". printf will return 1, and the then-branch will run, printing "The string is empty". This demonstrates the dependence on printf’s return value.



Why Other Options Are Wrong:
(a) would require a nonzero return. (c) There is output from the else-branch. (d) The program prints a string, not the number 0. (e) Nothing undefined occurs; the code is valid standard C.



Common Pitfalls:
Assuming if(printf(...)) tests whether the string is empty; forgetting that printf returns a count, not a boolean.



Final Answer:
The string is not empty

More Questions from Strings

Discussion & Comments

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