>> स्पीकर 1: चलो अब ठीक करने दें कि पिछले कार्यक्रम.
और इस बार, के लिए स्पष्ट रूप से आवंटित करते हैं कुछ स्मृति में जो
उपयोगकर्ता के इनपुट संग्रहीत किया जाएगा.
ऐसा करने के लिए, चलो कि पहली पर सान जाने हम एस घोषित जहां कोड की लाइन
पहले एक चार सितारा हो.
इस बार, चलो फिर से घोषित यह इस प्रकार है -
चार के ब्रैकेट 16, उदाहरण के लिए, बंद कोष्ठक.
>> दूसरे शब्दों में, कोई करने के लिए की घोषणा करते हैं अब एक चरित्र का एक पता होना,
लेकिन 16 अक्षरों का नहीं बल्कि एक सरणी.
इस तरह, उपयोगकर्ता के लिए 15 में टाइप कर सकते हैं वर्ण और अभी के लिए कमरे में छोड़
एक अशक्त टर्मिनेटर.
बचाने के लिए आगे बढ़ना, संकलन, और इस कार्यक्रम को चलाने.
Scanf2 डॉट स्लेश scanf2 बनाओ.
चलो अब नमस्ते की तरह एक स्ट्रिंग टाइप करते, और हम नमस्कार के लिए धन्यवाद दिया हो.
>> अब, एक समस्या अभी भी है.
मैं केवल केवल है जो, नमस्कार में टाइप अशक्त के लिए पांच अक्षर, प्लस 1
टर्मिनेटर.
यह केवल साथ छोड़ देता है छह बाइट्स के लिए एक की जरूरत है.
>> लेकिन दुर्भाग्य से, हम केवल कुल 16 आवंटित.
तो अगर 16 में उपयोगकर्ता वास्तव प्रकार वर्ण, या 17, या कई सौ
वर्ण, हम अभी भी करने के लिए नहीं जा रहे हैं के लिए स्मृति में पर्याप्त जगह
उपयोगकर्ता के इनपुट.
और वास्तव में, यह क्या करता है उपयोगकर्ता इनपुट हो रही है तो
सामान्य रूप में मुश्किल.
हम कार्यान्वित क्यों और वास्तव में, यह है पहले में मिल स्ट्रिंग समारोह
CS50 पुस्तकालय में जगह -
उन को संभालने के लिए बाहर निकालने के लिए स्थितियों जहाँ प्रयोक्ता प्रकार में
हम अधिक से अधिक वर्ण शुरू में प्रत्याशित.
>> सच कहूँ तो, बिना पूरी तरह से इस कार्यक्रम को फिर से लिखना,
कोई स्वच्छ समाधान है.
बल्कि, हमें क्या करना होगा मिलता है एक पर उपयोगकर्ता एक से एक चरित्र
समय, फिर और फिर.
और प्रत्येक बिंदु पर हम हम कर रहे हैं एहसास अगर स्मृति से बाहर है, हम पर करना होगा
उस बिंदु में वापस जाने के लिए और reallocate कुछ और स्मृति, उपयोगकर्ता की प्रति
हमारा पहला हिस्सा से पिछले इनपुट नई में स्मृति की,
स्मृति का बड़ा हिस्सा.
और उसके बाद फिर से उस प्रक्रिया को दोहराने और उपयोगकर्ता प्रदान किया जाता है फिर जब तक
अपने या अपने इनपुट.