In C, what does this program print with %s given embedded null bytes inside the array literal?
#include
#include
int main()
{
char str[] = "India\0\CURIOUSTAB\0";
printf("%s
", str);
return 0;
}
Select the exact output.
-
ACURIOUSTAB
-
BIndia
-
CIndia CURIOUSTAB
-
DIndia\0CURIOUSTAB
-
ENone of the above
Answer
Correct Answer: India
Explanation
Introduction / Context:This examines how printf with the %s format specifier handles C strings that contain embedded null bytes. In C, a string is terminated by the first null byte; any content after the first 0 byte is not part of the printable string for %s.
Given Data / Assumptions:
- An array initialized with "India\0\CURIOUSTAB\0".
- printf("%s", str) prints characters until the first null byte.
- The character encoding is ASCII-like so letters display ordinarily.
Concept / Approach:%s expects a pointer to a null-terminated byte sequence. The library reads characters sequentially, stopping at the first 0 byte. Thus, any bytes stored after the first null are ignored for printing via %s unless you print them separately by pointer arithmetic.
Step-by-Step Solution:The sequence at the array start is I n d i a followed by a null byte.printf("%s", str) reads characters until it reaches that null terminator.Therefore, only "India" appears on the output line.
Verification / Alternative check:If one printed &str[6] (i.e., a pointer into the array beyond the first null) and if the next segment were properly terminated, you could print "CURIOUSTAB". But with %s on str itself, output is just the first segment.
Why Other Options Are Wrong:CURIOUSTAB / India CURIOUSTAB / India\0CURIOUSTAB: They incorrectly assume that %s ignores or prints through the first null.None of the above: Incorrect because the program clearly prints "India".
Common Pitfalls:Confusing array storage with C-string semantics; forgetting that %s requires a single contiguous, null-terminated string starting at the given pointer.
Final Answer:India