strlen() फंक्शन
strlen() (string.h) स्ट्रिंग की लंबाई (नल टर्मिनेटर '\0' से पहले के वर्णों की संख्या) लौटाता है।
सिंटैक्स
size_t strlen(const char *str);
- रिटर्न प्रकार:
size_t(अनसाइन्ड पूर्णांक) - पैरामीटर:
const char*- स्ट्रिंग संशोधित नहीं होती - समय जटिलता: O(n) - हर बार पूरी स्ट्रिंग स्कैन करता है
उदाहरण 1: strlen() उपयोग
#include <stdio.h>
#include <string.h>
int main() {
char name[100];
printf("अपना नाम दर्ज करें: ");
fgets(name, sizeof(name), stdin);
// fgets नई लाइन शामिल करता है, हटाएं
size_t len = strlen(name);
if (len > 0 && name[len-1] == '\n')
name[--len] = '\0';
printf("आपका नाम: %s\n", name);
printf("स्ट्रिंग लंबाई: %zu\n", len);
return 0;
}
आउटपुट
अपना नाम दर्ज करें: Tutorialspoint आपका नाम: Tutorialspoint स्ट्रिंग लंबाई: 14
उदाहरण 2: strlen() के बिना लंबाई ज्ञात करना
#include <stdio.h>
size_t my_strlen(const char *str) {
size_t len = 0;
while (str[len] != '\0')
len++;
return len;
}
int main() {
char str[100];
printf("स्ट्रिंग दर्ज करें: ");
scanf("%99s", str); // स्पेस नहीं पढ़ेगा
printf("लंबाई (strlen): %zu\n", strlen(str));
printf("लंबाई (my_strlen): %zu\n", my_strlen(str));
return 0;
}
महत्वपूर्ण बिंदु
⚠ strlen() की सामान्य गलतियाँ
- लूप में strlen():
for(i=0; i<strlen(s); i++)→ O(n²)। लंबाई पहले निकालकर वेरिएबल में रखें। - बफर आकार vs लंबाई:
sizeof(arr)सरणी का कुल आकार देता है,strlen(arr)केवल डेटा लंबाई। - नल टर्मिनेटर:
strlen'\0'नहीं गिनता;sizeofगिनता है यदि सरणी में हो। - पॉइंटर पर sizeof:
sizeof(ptr)पॉइंटर का आकार देता है (4/8 बाइट्स), स्ट्रिंग लंबाई नहीं।
आकार तुलना
char str[] = "Hello"; // सरणी: आकार 6 (H,e,l,l,o,\0)
char *ptr = "Hello"; // पॉइंटर: आकार 8 (64-बिट पर)
printf("sizeof(str) = %zu\n", sizeof(str)); // 6
printf("strlen(str) = %zu\n", strlen(str)); // 5
printf("sizeof(ptr) = %zu\n", sizeof(ptr)); // 8
printf("strlen(ptr) = %zu\n", strlen(ptr)); // 5
प्रदर्शन टिप
// खराब: O(n²)
for (int i = 0; i < strlen(s); i++) { ... }
// अच्छा: O(n)
size_t len = strlen(s);
for (int i = 0; i < len; i++) { ... }
// बेहतर: पॉइंटर पुनरावृत्ति
for (const char *p = s; *p; p++) { ... }
सुरक्षित विकल्प: strnlen()
#include <string.h>
// अधिकतम maxlen वर्ण जांचता है, नल टर्मिनेटर न मिलने पर भी सुरक्षित
size_t strnlen(const char *str, size_t maxlen);
बफर ओवरफ्लो सुरक्षा के लिए उपयोगी जब स्ट्रिंग नल-टर्मिनेटेड होने की गारंटी न हो।