C | Structure & Union | Question 8

filter_none

edit
close

play_arrow

link
brightness_4
code

union test
{
    int x;
    char arr[4];
    int y;
};
  
int main()
{
    union test t;
    t.x = 0;
    t.arr[1] = 'G';
    printf("%s", t.arr);
    return 0;
}

chevron_right


Predict the output of above program. Assume that the size of an integer is 4 bytes and size of character is 1 byte. Also assume that there is no alignment needed.
(A) Nothing is printed
(B) G
(C) Garbage character followed by ‘G’
(D) Garbage character followed by ‘G’, followed by more garbage characters
(E) Compiler Error


Answer: (A)

Explanation: Since x and arr[4] share the same memory, when we set x = 0, all characters of arr are set as 0. O is ASCII value of ‘\0’. When we do “t.arr[1] = ‘G'”, arr[] becomes “\0G\0\0”. When we print a string using “%s”, the printf function starts from the first character and keeps printing till it finds a \0. Since the first character itself is \0, nothing is printed.

Quiz of this Question

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up