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 क्यारेक्टरको ह्यान्डलिङ्ग र बफर क्लियर जस्ता उपायहरू आवश्यक पर्छ। यस लेखमा प्रस्तुत गरिएको प्रविधिहरूलाई प्रयोग गरेर, सुरक्षित र प्रभावकारी इनपुट प्रोसेसिङ्ग गरौं।