Comparing two distinct C arrays of identical contents: what does this program print? #include<stdio.h> int main() { char str1[] = "Hello"; char str2[] = "Hello"; if (str1 == str2) printf("Equal "); else printf("Unequal "); return 0; }

Difficulty: Easy

Correct Answer: Unequal

Explanation:


Introduction / Context:
In C, arrays are not directly comparable by value with ==. When used in expressions, array names decay to pointers to their first elements. This program compares the addresses of two separate arrays, not their string contents.



Given Data / Assumptions:

  • Two separate arrays: str1 and str2, each initialized with "Hello".
  • The expression str1 == str2 compares the addresses of the first elements of each array.
  • They are distinct objects in memory.


Concept / Approach:
Since str1 and str2 denote different storage, their addresses are different, so pointer equality is false. Value comparison of strings requires strcmp (or memcmp for raw bytes) rather than ==. Therefore the else branch executes and prints "Unequal".



Step-by-Step Solution:
str1 and str2 each hold "Hello" and terminate with '\0'.When compared with ==, they decay to pointers (char*).The pointers do not reference the same memory location, so comparison is false.Program prints "Unequal".



Verification / Alternative check:
Using if (strcmp(str1, str2) == 0) would print "Equal". Or assign one pointer to reference the other’s buffer (char *p = str1; char *q = str1;), then p == q would be true.



Why Other Options Are Wrong:
“Equal” mistakes value equality for pointer equality. “Error” is incorrect; code compiles. The “depends on compiler” option is wrong; the objects are distinct by definition.



Common Pitfalls:
Confusing array names with pointers; relying on == for string content comparison instead of strcmp.



Final Answer:
Unequal

More Questions from Strings

Discussion & Comments

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