स्ट्रिंग क्या है?
कैरेक्टर्स की एक सरणी (या संग्रह) को स्ट्रिंग कहा जाता है। C में स्ट्रिंग हमेशा नल कैरेक्टर '\0' से समाप्त होती है।
स्ट्रिंग इनपुट/आउटपुट फ़ंक्शन
1. scanf() और printf() - %s फॉर्मेट स्पेसिफायर
char str[50];
scanf("%s", str); // इनपुट (स्पेस तक पढ़ता है)
printf("%s", str); // आउटपुट
सीमा: स्पेस/व्हाइटस्पेस पर रुक जाता है। "Hello World" → केवल "Hello" पढ़ेगा।
2. gets() और puts() - पूर्ण पंक्ति
char str[50];
gets(str); // इनपुट (स्पेस सहित पूर्ण पंक्ति) - असुरक्षित!
puts(str); // आउटपुट + स्वचालित नई पंक्ति
चेतावनी: gets() असुरक्षित है (बफर ओवरफ्लो)। उपयोग न करें।
3. fgets() और fputs() - सुरक्षित विकल्प
char str[50];
fgets(str, sizeof(str), stdin); // सुरक्षित इनपुट
fputs(str, stdout); // आउटपुट
सबसे अच्छा अभ्यास: fgets() का उपयोग करें, फिर नई पंक्ति हटाएं।
उदाहरण 1: scanf/printf (स्पेस नहीं पढ़ता)
#include <stdio.h>
int main() {
char name[30];
printf("अपना नाम दर्ज करें: ");
scanf("%s", name); // केवल पहला शब्द पढ़ेगा
printf("आपका नाम: %s\n", name);
return 0;
}
आउटपुट
अपना नाम दर्ज करें: Lucky Lol
आपका नाम: Lucky
उदाहरण 2: fgets/puts (स्पेस सहित पूर्ण पंक्ति)
#include <stdio.h>
#include <string.h>
int main() {
char name[30];
printf("अपना नाम दर्ज करें: ");
fgets(name, sizeof(name), stdin);
// fgets नई पंक्ति शामिल करता है, उसे हटाएं
name[strcspn(name, "\n")] = '\0';
printf("आपका नाम: ");
puts(name);
return 0;
}
आउटपुट
अपना नाम दर्ज करें: Lucky Lol
आपका नाम: Lucky Lol
तुलना तालिका
| फ़ंक्शन | प्रकार | स्पेस पढ़ता है | सुरक्षित | नई पंक्ति |
|---|---|---|---|---|
| scanf("%s") | इनपुट | नहीं | हाँ (चौड़ाई के साथ) | नहीं |
| gets() | इनपुट | हाँ | नहीं (बफर ओवरफ्लो) | हटाता है |
| fgets() | इनपुट | हाँ | हाँ | रखता है |
| printf("%s") | आउटपुट | - | हाँ | नहीं |
| puts() | आउटपुट | - | हाँ | जोड़ता है |
| fputs() | आउटपुट | - | हाँ | नहीं |
महत्वपूर्ण नोट्स
&स्ट्रिंग के लिए उपयोग नहीं किया जाता क्योंकि सरणी नाम आधार पता देता हैscanfस्पेस को कैरेक्टर नहीं मानता- कंपाइलर स्वचालित रूप से अंत में
'\0'रखता है (स्ट्रिंग लिटरल के लिए) - उपयोगकर्ता इनपुट के लिए
fgets+strcspnसर्वश्रेष्ठ अभ्यास है
उन्नत: स्कैनसेट के साथ scanf
// स्पेस सहित पढ़ने के लिए स्कैनसेट
char str[100];
scanf("%[^\n]", str); // नई पंक्ति तक सब कुछ पढ़ें
scanf("%*c"); // नई पंक्ति खाएं