Write a program to compare two objects of a structure. Ans #include <stdio.h> #include <string.h> #include <stdlib.h> int main ( void ) { struct A { int _1; /* sizeof ( int ) == 4 */ int _2; float _3; /* sizeof ( float ) == 4 */ char _4; /* sizeof ( char ) is always == 1 */ }a, b; /* initialize a and b */ ... if ( memcmp ( &a, &b, sizeof a ) == 0 ) puts ( "The two structures are equal" ); else puts ( "The structures are unequal" ); return EXIT_SUCCESS; } This program is very general, and might invoke undefined behaviour. To make a structure object properly aligned, the compiler inserts padding bytes whenever (or wherever) necessary. The Standard does not specify what value these padded bytes should take. In this example, the objects, a and b, looks like this: 4 bytes 4 bytes 4 bytes 4 bytes (enlarged) ______ ______ ______ ____ ____ ____ ____ | _1 | | _2 | | _3 | | _4 | P | P | P | ------ ------ ------ ---- ---- ---- ---- Byte # 0 4 8 12 13 14 15 P is a padding byte in the above illustration, whose value is undefined. Some compilers may initialize such bytes to zero, or some may leave it untouched. And, memcmp() compares padding bytes also, even though these bytes have no meaning! A more portable and dependable solution is to compare structure members-by-member, i.e., if ( a._1 == b._1 && a._2 == b._2 && a._3 == b._3 && a._4 == b._4 ) puts ( "The two structures are equal" ); else puts ( "The structures are unequal" );