पाठ 17 / 36
string.h फंक्शंस
लंबाई, कॉपी, तुलना और जोड़ने के लिए मानक हेल्पर्स।
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)` से क्यों बचना चाहिए?
- यह contents नहीं, pointer address तुलना करता है
- यह हमेशा true लौटाता है
- यह केवल संख्याओं के साथ काम करता है
Answer
यह contents नहीं, pointer address तुलना करता है — ऐरे pointer में decay होते हैं, इसलिए `==` addresses तुलना करता है; content के लिए `strcmp` उपयोग करें।