# string.h फंक्शंस — C प्रोग्रामिंग

Source: https://www.geekswithgeeks.com/hi/c/c-string-functions

> लंबाई, कॉपी, तुलना और जोड़ने के लिए मानक हेल्पर्स।

## strlen और strcpy

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

```c
#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` एक स्ट्रिंग को दूसरे के अंत में जोड़ता है।

```c
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` को प्राथमिकता दें।

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

- [x] यह contents नहीं, pointer address तुलना करता है
- [ ] यह हमेशा true लौटाता है
- [ ] यह केवल संख्याओं के साथ काम करता है

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