पाठ 18 / 38

string.h फंक्शंस

string.h के strlen, strcpy, strcmp और strcat उपयोग करें और उनके buffer-size जोखिम समझें।

strlen और strcpy

strlen '\0' से पहले के characters गिनता है (उसे शामिल किए बिना)। strcpy null terminator सहित स्ट्रिंग कॉपी करता है।

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

char src[] = "hello";
char dest[10];

printf("%zu\n", strlen(src)); // 5
strcpy(dest, src);
printf("%s\n", dest);

Output:

5
hello

strcmp और strcat

जब स्ट्रिंग बराबर हों तो strcmp 0 लौटाता है (स्ट्रिंग तुलना के लिए कभी == न करें!)। strcat एक स्ट्रिंग को दूसरे के अंत में जोड़ता है।

char a[20] = "cat";
char b[]   = "cat";

if (strcmp(a, b) == 0) {
    printf("equal\n");
}

strcat(a, "fish");
printf("%s\n", a);

Output:

equal
catfish

बफर पर्याप्त बड़ा होना चाहिए

strcpy/strcat डेस्टिनेशन का साइज़ नहीं जाँचते — उससे आगे लिखने पर मेमोरी करप्ट होती है। स्पष्ट साइज़ सीमा के साथ strncpy/strncat को प्राथमिकता दें।

त्वरित जाँच: दो C स्ट्रिंग की तुलना के लिए `if (str1 == str2)` से क्यों बचना चाहिए?

  • यह हमेशा true लौटाता है
  • यह केवल संख्याओं के साथ काम करता है
  • यह contents नहीं, pointer address तुलना करता है
  • यह strcmp से धीमा है
Answer

यह contents नहीं, pointer address तुलना करता है — ऐरे pointer में decay होते हैं, इसलिए `==` addresses तुलना करता है; content के लिए `strcmp` उपयोग करें।