memcmp() और memicmp() दो मेमोरी ब्लॉक्स के पहले n बाइट्स की तुलना करते हैं।
मुख्य अंतर
| फंक्शन | तुलना प्रकार | केस सेंसिटिविटी |
|---|---|---|
| memcmp() | अनसाइन्ड कैरेक्टर्स के रूप में | केस-सेंसिटिव |
| memicmp() | कैरेक्टर्स के रूप में | केस-इनसेंसिटिव (अपर/लोअर केस इग्नोर करता है) |
रिटर्न मान
- 0 - दोनों मेमोरी बफर समान हैं
- > 0 - पहला बफर दूसरे से बड़ा है
- < 0 - पहला बफर दूसरे से छोटा है
प्रोग्राम
#include <stdio.h>
#include <string.h>
#include <strings.h> // memicmp के लिए (POSIX)
void check(int x) {
if(x == 0)
printf("Buffers st1 and st2 hold same data\n");
else if(x > 0)
printf("Buffer st1 is bigger than buffer st2\n");
else
printf("Buffer st1 is less than buffer st2\n");
}
int main() {
char st1[] = "This is C Programming language";
char st2[] = "this is c programming";
int result;
// memcmp - केस सेंसिटिव
result = memcmp(st1, st2, strlen(st2));
printf("1. Result using memcmp: ");
check(result);
// memicmp - केस इनसेंसिटिव (POSIX, गैर-मानक)
result = memicmp(st1, st2, strlen(st2));
printf("2. Result using memicmp: ");
check(result);
return 0;
}
आउटपुट
1. Result using memcmp: Buffer st1 is less than buffer st2 2. Result using memicmp: Buffers st1 and st2 hold same data
व्याख्या
- memcmp: 'T' (ASCII 84) < 't' (ASCII 116), इसलिए पहला बफर "कम" माना जाता है।
- memicmp: केस इग्नोर करता है, इसलिए दोनों स्ट्रिंग्स समान मानी जाती हैं।
पोर्टेबिलिटी नोट
- memcmp - ANSI C स्टैंडर्ड (ISO C), सभी प्लेटफॉर्म्स पर उपलब्ध।
- memicmp - माइक्रोसॉफ्ट/बोर्लैंड एक्सटेंशन, POSIX में
strncasecmpके समान। Linux/GCC मेंstrncasecmpउपयोग करें।
पोर्टेबल विकल्प
// केस-इनसेंसिटिव मेमोरी तुलना (पोर्टेबल)
int memcasecmp(const void *s1, const void *s2, size_t n) {
const unsigned char *p1 = s1, *p2 = s2;
for(size_t i = 0; i < n; i++) {
unsigned char c1 = tolower(p1[i]);
unsigned char c2 = tolower(p2[i]);
if(c1 != c2) return c1 - c2;
}
return 0;
}
सारांश
- बाइनरी डेटा तुलना के लिए memcmp उपयोग करें।
- टेक्स्ट तुलना के लिए जहां केस मैटर नहीं करता, strncasecmp (POSIX) या कस्टम फंक्शन उपयोग करें।
- memicmp गैर-मानक है, पोर्टेबल कोड में बचें।