>> स्पीकर 1: चलो एक प्रोग्राम लिखने करते हैं कि बिना उपयोगकर्ता से एक स्ट्रिंग हो जाता है
CS50 लाइब्रेरी का उपयोग GetString कार्य करते हैं.
ऐसा करने के लिए, हम आगे जाना है और उपयोग करेंगे scanf, समारोह कि GetString
समारोह वास्तव में उपयोग करता है हुड के नीचे.
लेकिन मैं जानबूझ कर ऐसा करने के लिए जा रहा हूँ एक छोटी गाड़ी रास्ते में.
मैं मुझे लगता है कि एक तरह से करने के लिए जा रहा हूँ सही हो, लेकिन यह पता चला है कि
मेरी धारणा जा रहा है काफी, काफी त्रुटिपूर्ण हो.
और वास्तव में, काफी खतरनाक है.
क्योंकि मैं हूँ के बारे में एक तरह के कीड़े विरोधियों द्वारा शोषण किया जा सकता बनाने
ऐसी है कि आपकी मशीन या आपकी कार्यक्रम संभवतः अधिक लिया जा सकता है.
>> इस प्रकार के रूप चलो शुरू करें.
पहले हम हमारे स्ट्रिंग की घोषणा करते हैं, अन्यथा, एक चार सितारा के रूप में अब जाना जाता है
और यह बात कहते हैं.
अगले एक स्ट्रिंग के लिए उपयोगकर्ता का संकेत देता है, "कृपया स्ट्रिंग." के साथ के रूप में और
चलो अब उपयोगकर्ता से स्ट्रिंग मिलता है गंदें शब्द बोलना बोली, "% s.", scanf का उपयोग में
दूसरे शब्दों में, चलो कि हम scanf सूचित वास्तव में एक स्ट्रिंग प्राप्त करने की उम्मीद है
उपयोगकर्ता से.
>> लेकिन अब हम scanf बताने की जरूरत एक दूसरी बात -
स्ट्रिंग डाल करने के लिए जहां कि उपयोगकर्ता प्रदान करता है.
खैर, मैं बहुत आसानी से शुरू करने जा रहा हूँ अल्पविराम है, मैं चाहता हूँ कि निर्दिष्ट के साथ
scanf वहाँ स्ट्रिंग डाल दिया.
मैं अगले कुछ बाहर मुद्रित करने के लिए जा रहा हूँ % s के लिए printf "धन्यवाद की तरह
बैकस्लैश n अल्पविराम. "और हमेशा की तरह, मैं हूँ स्ट्रिंग, एस में पारित करने के लिए जा रहा है.
अब, चलो बचाने संकलन, और इस दौड़ हम प्रेरित नहीं कर सकते हैं अगर कार्यक्रम, और देखो
समस्या मैं भविष्यवाणी की.
>> Scanf -1 बनाओ.
./scanf-1.
स्ट्रिंग कृपया.
की तरह कुछ प्रदान करते हैं "नमस्ते." "अशक्त के लिए धन्यवाद." हम्म, कि नहीं है
मैं उम्मीद कर रहा था क्या.
तो यहाँ क्या हो रहा है?
>> हम घोषित ठीक है, क्योंकि यह पता चला है एक चार सितारा के रूप में लेकिन हम नहीं
वास्तव में एक का पता है में संग्रहित स्मृति का वास्तविक हिस्सा, scanf नहीं किया
स्ट्रिंग डालने के लिए कहीं भी है कि अंदर टाइप किया उपयोगकर्ता
दरअसल, उपयोगकर्ता थे, तो अब में टाइप करने के लिए "नमस्ते" से एक बहुत लंबे समय तक स्ट्रिंग
उदाहरण के लिए कई पाठ की पंक्तियों या पाठ के कई अनुच्छेदों, यह काफी है
हम उत्पन्न हो सकता है कि संभव है एक विभाजन दोष तथाकथित.
>> Scanf पता करने के लिए नहीं जा रहा है क्योंकि कि मैं वास्तव में एक पता नहीं डाल दिया है
एस के अंदर.
दरअसल, यह कुछ मूल्य को देखने के लिए जा रहा है एस में, के कुछ पैटर्न बिट्स कि हो सकता है
बहुत अच्छी तरह से एक कचरा मूल्य हो, वहाँ सिर्फ संयोग से.
और scanf अभी भी लिखने की कोशिश करने जा रहा है उस पते पर उपयोगकर्ता स्ट्रिंग,
यह एक कचरा मूल्य है, भले ही जो वास्तव में एक दुर्घटना के लिए प्रेरित कर सकता है.
>> तो हम कैसे इसे ठीक करने के लिए जा रहे हैं?