पाठ 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` उपयोग करें।