C strings and the null terminator: what does this program print? #include<stdio.h> #include<string.h> int main() { static char s[] = "Hello!"; printf("%d ", *(s + strlen(s))); return 0; }

Difficulty: Easy

Correct Answer: 0

Explanation:

Introduction / Context:This question checks your knowledge of how strlen works and what lies at the first index past the last character in a C string. It emphasizes the importance of the null terminator '\0'.

Given Data / Assumptions:

  • s is "Hello!" which has 6 visible characters.
  • strlen(s) returns the number of characters before the null terminator, so strlen(s) = 6.
  • s is a proper C string with s[6] == '\0'.

Concept / Approach:C strings end with a null byte, numeric value 0. The expression s + strlen(s) points exactly to that null byte. Dereferencing it with *(...) yields the char value 0, which then promotes to int when printed with %d.

Step-by-Step Solution:Compute n = strlen(s) → 6.Pointer arithmetic: s + n points to s[6], the null terminator.Dereference *(s + n) → value is '\0', whose integer value is 0.printf("%d", 0) prints 0.

Verification / Alternative check:Printing as a character with "%c" would not show a printable symbol because '\0' is non-printing. Using s[n-1] would print '!' with value 33 if printed as %d.

Why Other Options Are Wrong:Numbers like 8, 16, or 33 correspond to other characters or guesses and are unrelated to the null byte here. “Error” is incorrect because the code is valid and well-defined.

Common Pitfalls:Off-by-one errors around string ends; assuming strlen counts the terminator; mixing character codes with visible characters without confirming the exact index.

Final Answer:0

More Questions from Strings

Discussion & Comments

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