C भाषा: fgets फंक्शनको पूर्ण विश्लेषण – सुरक्षित स्ट्रिङ इनपुट र बफर ह्यान्डलिंग

1. परिचय

fgetsयो फङ्क्शन C भाषामा स्ट्रिङलाई सुरक्षित रूपमा पढ्नको लागि मानक लाइब्रेरी फङ्क्शन हो। परम्परागत gets फङ्क्शनको विकल्पको रूपमा सुरक्षित तरिका रूपमा व्यापक रूपमा प्रयोग गरिन्छ। यस लेखमा, हामी fgets फङ्क्शनको प्रयोग, यसको फाइदाहरू र बेफाइदाहरू, र सुरक्षित इनपुट प्रोसेसिङ्गको तरिकाबारे विस्तृत रूपमा व्याख्या गर्नेछौं।

2. fgets कार्यको मूलभूत प्रयोग

2.1 fgets को सिन्ट्याक्स र पैरामीटर

fgets को मूलभूत सिन्ट्याक्स तलको जस्तै छ।

char *fgets(char *str, int n, FILE *stream);
  • str: इनपुट गरिएको स्ट्रिङ्गलाई संग्रह गर्ने बफर
  • n: पढ्ने अधिकतम क्यारेक्टर संख्या (बफर साइज)
  • stream: इनपुट स्ट्रिम (सामान्यतया stdin)

2.2 नमूना कोडको परिचय

तलको उदाहरण fgets प्रयोग गरेर बनाइएको मूलभूत उदाहरण हो।

char buffer[50];
fgets(buffer, 50, stdin);
printf("प्रविष्ट गरिएको स्ट्रिङ:%s", buffer);

यो कोडले प्रयोगकर्ताबाट अधिकतम 49 अक्षर (अन्त्यको नल अक्षर सहित 50 अक्षर) पढ्छ र परिणामलाई आउटपुट गर्छ।

年収訴求

3. fgetsको फाइदाहरू र समस्याहरू

3.1 getsको तुलनामा सुरक्षा

gets फङ्सनले बफर ओभरफ्लो उत्पन्न गर्ने सम्भावना भएको कारण, सुरक्षा जोखिम उच्च छ। अर्कोतर्फ, fgets फङ्सनले पढ्ने क्यारेक्टर संख्या निर्दिष्ट गर्न सक्ने कारण, बफर ओभरफ्लोलाई रोक्छ।

3.2 नयाँ लाइन क्यारेक्टरको समस्या र बफरको ह्यान्डलिङ

fgets इनपुट गर्दा नयाँ लाइन क्यारेक्टर पनि समेटेर पढ्ने कारण, अनपेक्षित नयाँ लाइन समावेश हुन सक्छ। साथै, बफर साइजमा सीमा भएको कारण, इनपुटले त्यसलाई पार गरेमा स्ट्रिममा अतिरिक्त डेटा बाँकी रहन्छ।

4. सुरक्षित इनपुट प्रोसेसिङ्गको तरिका

4.1 लाइन ब्रेक क्यारेक्टर हटाउने तरिका

fgets ले पढिएको स्ट्रिङमा लाइन ब्रेक क्यारेक्टर समावेश हुन सक्छ। यसलाई हटाउनको लागि, तलको जस्तै कोड थप्नुहोस्।

char *newline = strchr(buffer, 'n');
if (newline) {
    *newline = '\0';
}

यस प्रोसेसले लाइन ब्रेक क्यारेक्टरलाई नल क्यारेक्टरमा बदल्छ, र स्ट्रिङलाई सफा बनाउँछ।

4.2 बफर क्लियर गर्ने तरिका

इनपुट बफर साइज भन्दा बढी भएमा, इनपुट स्ट्रिममा डेटा बाँकी रहन सक्छ। यसलाई रोक्नको लागि, बाँकी डेटा पढेर फाल्ने प्रोसेस थप्नुहोस्।

while ((getchar()) != 'n' && !feof(stdin));

यो कोडले लाइन ब्रेक क्यारेक्टर वा फाइलको अन्त्यसम्म इनपुट स्ट्रिमलाई क्लियर गर्छ।

5. fgets प्रयोग गर्दा ध्यान दिनुपर्ने बुँदाहरू

5.1 त्रुटि प्रक्रिया र अपवाद प्रक्रिया को महत्व

fgets सफल इनपुटमा पोइन्टर फिर्ता गर्छ, असफल भएमा NULL फिर्ता गर्छ। त्रुटि उत्पन्न भएमा प्रक्रिया उचित रूपमा गर्नु महत्त्वपूर्ण छ।

if (fgets(buffer, sizeof(buffer), stdin) == NULL) {
    // त्रुटि प्रबन्धन
}

5.2 उत्तम अभ्यास

fgets प्रयोग गर्दा सधैँ बफरको आकार र त्रुटि प्रक्रिया विचार गर्नु महत्त्वपूर्ण छ। बफरको ओभरफ्लो र इनपुट डेटा को प्रमाणीकरण गरी, सुरक्षित कार्यक्रम बनाऔं।

6. fgets प्रयोग गरेर व्यावहारिक कोड उदाहरण

6.1 इनपुटको मान्यकरण र स्यानिटाइजेशन

जब प्रयोगकर्ता इनपुटलाई प्रक्रिया गरिन्छ, इनपुटको जाँच र स्यानिटाइजेशन अनिवार्य हुन्छ। तलको कोड उदाहरणमा, केवल अंकहरूलाई स्वीकार गर्ने गरी इनपुटलाई जाँच गरिन्छ।

char input[10];
if (fgets(input, sizeof(input), stdin) != NULL) {
    // नयाँ पङ्क्ति वर्ण हटाउनुहोस्
    char *newline = strchr(input, 'n');
    if (newline) {
        *newline = '\0';
    }

    // केवल अंकहरू स्वीकार गर्नुहोस्
    if (strspn(input, "0123456789") == strlen(input)) {
        printf("प्रविष्ट गरिएको अंकहरू:%sn", input);
    } else {
        printf("अवैध इनपुट हो। केवल अंकहरू प्रविष्ट गर्नुहोस्。n");
    }
}

7. सारांश

fgets function C भाषा मा स्ट्रिङलाई सुरक्षित रूपमा पढ्नको लागि उपयोगी उपकरण हो।gets function सँग तुलना गर्दा सुरक्षित छ र बफर ओभरफ्लोको जोखिमलाई घटाउँछ। तर,fgets को प्रयोगमा newline क्यारेक्टरको ह्यान्डलिङ्ग र बफर क्लियर जस्ता उपायहरू आवश्यक पर्छ। यस लेखमा प्रस्तुत गरिएको प्रविधिहरूलाई प्रयोग गरेर, सुरक्षित र प्रभावकारी इनपुट प्रोसेसिङ्ग गरौं।

年収訴求