C memcmp() Function

The memcmp() function in C is a standard library function that compares two blocks of memory. It is part of the C standard library (string.h). This function is useful for comparing arrays, structures, or any other blocks of memory byte by byte.

Table of Contents

  1. Introduction
  2. memcmp() Function Syntax
  3. Understanding memcmp() Function
  4. Examples
    • Comparing Two Arrays of Integers
    • Comparing Two Structures
  5. Real-World Use Case
  6. Conclusion

Introduction

The memcmp() function compares the first n bytes of two memory blocks. It returns an integer less than, equal to, or greater than zero if the first block is found to be less than, equal to, or greater than the second block, respectively.

memcmp() Function Syntax

The syntax for the memcmp() function is as follows:

int memcmp(const void *s1, const void *s2, size_t n);

Parameters:

  • s1: A pointer to the first memory block to be compared.
  • s2: A pointer to the second memory block to be compared.
  • n: The number of bytes to compare.

Returns:

  • The function returns an integer less than, equal to, or greater than zero if the first n bytes of s1 are found to be less than, equal to, or greater than the first n bytes of s2, respectively.

Understanding memcmp() Function

The memcmp() function performs a byte-by-byte comparison of the first n bytes of the memory blocks pointed to by s1 and s2. The comparison is done lexicographically using unsigned characters. This function is often used to compare the contents of arrays or structures.

Examples

Comparing Two Arrays of Integers

To demonstrate how to use memcmp() to compare two arrays of integers, we will write a simple program.

Example

#include <stdio.h>
#include <string.h>

int main() {
    int array1[] = {1, 2, 3, 4, 5};
    int array2[] = {1, 2, 3, 4, 5};
    int array3[] = {1, 2, 3, 4, 6};
    size_t n = sizeof(array1);

    // Compare array1 and array2
    int result1 = memcmp(array1, array2, n);
    printf("Comparison of array1 and array2: %d\n", result1);

    // Compare array1 and array3
    int result2 = memcmp(array1, array3, n);
    printf("Comparison of array1 and array3: %d\n", result2);

    return 0;
}

Output:

Comparison of array1 and array2: 0
Comparison of array1 and array3: -1

Comparing Two Structures

This example shows how to use memcmp() to compare two structures.

Example

#include <stdio.h>
#include <string.h>

typedef struct {
    int id;
    char first_name[20];
    char last_name[20];
} Person;

int main() {
    Person person1 = {1, "Ramesh", "Fadatare"};
    Person person2 = {1, "Ramesh", "Fadatare"};
    Person person3 = {2, "Suresh", "Fadatare"};

    // Compare person1 and person2
    int result1 = memcmp(&person1, &person2, sizeof(Person));
    printf("Comparison of person1 and person2: %d\n", result1);

    // Compare person1 and person3
    int result2 = memcmp(&person1, &person3, sizeof(Person));
    printf("Comparison of person1 and person3: %d\n", result2);

    return 0;
}

Output:

Comparison of person1 and person2: 0
Comparison of person1 and person3: -1

Real-World Use Case

Verifying Data Integrity

In real-world applications, the memcmp() function can be used to verify the integrity of data by comparing two memory blocks, such as comparing received data with expected data.

Example: Verifying Data Integrity

#include <stdio.h>
#include <string.h>

int main() {
    char data_received[] = "Hello, World!";
    char data_expected[] = "Hello, World!";
    char data_corrupted[] = "Hello, World?";

    // Verify data integrity
    int result1 = memcmp(data_received, data_expected, strlen(data_expected) + 1);
    printf("Verification of received data: %s\n", result1 == 0 ? "Passed" : "Failed");

    // Verify corrupted data
    int result2 = memcmp(data_received, data_corrupted, strlen(data_expected) + 1);
    printf("Verification of corrupted data: %s\n", result2 == 0 ? "Passed" : "Failed");

    return 0;
}

Output:

Verification of received data: Passed
Verification of corrupted data: Failed

Conclusion

The memcmp() function is used for comparing blocks of memory in C. By understanding and using this function correctly, you can efficiently compare arrays, structures, and other data types in your programs. This is particularly useful for verifying data integrity and ensuring that memory contents match expected values. Always ensure that the memory blocks being compared are of the same size to get accurate results.

Comments