1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:11,261 [संगीत खेल] 3 00:00:11,261 --> 00:00:12,640 >> डेविड जे Malan: सब ठीक है. 4 00:00:12,640 --> 00:00:14,525 इस CS50 है. 5 00:00:14,525 --> 00:00:16,009 और इस सप्ताह 5 की शुरुआत है. 6 00:00:16,009 --> 00:00:18,050 और आप देखा हो, सामग्री के कुछ 7 00:00:18,050 --> 00:00:21,050 एक छोटे से अधिक हो रही है जटिल, थोड़ा सघन. 8 00:00:21,050 --> 00:00:24,560 >> और यह विशेष रूप से अगर, बहुत आसान है यदि आप कुछ समय के लिए आदत में रहा हूँ 9 00:00:24,560 --> 00:00:28,600 सबसे नीचे घसीटना कोशिश कर रहा हो हम कुछ भी, हम वर्ग में कह रहे हैं. 10 00:00:28,600 --> 00:00:31,626 लेकिन वह शायद नहीं है, एहसास आदर्श शैक्षणिक दृष्टिकोण 11 00:00:31,626 --> 00:00:34,250 सामग्री के इस तरह सीखने के लिए, और सामग्री और अधिक आम तौर पर. 12 00:00:34,250 --> 00:00:37,250 और इसलिए हम खुश हैं कि CS50 की अपनी Gheng घोषणा 13 00:00:37,250 --> 00:00:39,780 गोंग तैयार करने के लिए शुरू हो गया है नोटों की एक विहित सेट 14 00:00:39,780 --> 00:00:42,100 कोर्स के लिए, की आशा जो ये, कि एक है 15 00:00:42,100 --> 00:00:44,030 न केवल एक के रूप में सेवा संदर्भ और एक संसाधन 16 00:00:44,030 --> 00:00:47,410 सामग्री की समीक्षा करने और जाने के लिए वापस सामग्री के माध्यम से हो सकता है कि 17 00:00:47,410 --> 00:00:51,230 , आप के आसपास पहली बार भाग निकले लेकिन भी इतनी है कि आपके सिर हो सकता है अधिक 18 00:00:51,230 --> 00:00:53,740 नीचे, जब यह से ऊपर व्याख्यान के लिए समय आता है, 19 00:00:53,740 --> 00:00:56,960 आप संलग्न हो सकता है ताकि अधिक सोच समझकर, के रूप में 20 00:00:56,960 --> 00:00:59,170 अधिक scribbly करने का विरोध किया. 21 00:00:59,170 --> 00:01:02,510 >> साथ ही कहा, आप पर क्या मिलेगा वेबसाइट के रूप में यह इस तरह के दस्तावेज है. 22 00:01:02,510 --> 00:01:04,660 और नोटिस, बाईं शीर्ष पर, वहाँ न केवल सामग्री की एक मेज, 23 00:01:04,660 --> 00:01:06,920 लेकिन यह भी समय कोड है कि आपको तुरंत कूद जाएगा 24 00:01:06,920 --> 00:01:09,077 उचित हिस्सा करने के लिए वीडियो ऑनलाइन में. 25 00:01:09,077 --> 00:01:11,410 और यहाँ क्या चांग किया गया है अनिवार्य रूप से, प्रलेखित है 26 00:01:11,410 --> 00:01:13,340 क्या इस में हुआ विशेष व्याख्यान. 27 00:01:13,340 --> 00:01:16,370 और व्याख्यान के कई हैं पहले से ही ऑनलाइन अब इस यूआरएल के साथ. 28 00:01:16,370 --> 00:01:20,110 और हम शेष पोस्ट करने के लिए जारी रखेंगे इस सप्ताह के अंत तक उन की, 29 00:01:20,110 --> 00:01:22,380 ताकि संसाधन का लाभ लेते हैं. 30 00:01:22,380 --> 00:01:25,740 >> तो आगे की हलचल के बिना, हम वापस छील करने के लिए शुरू कर दिया 31 00:01:25,740 --> 00:01:28,180 कर दिया गया है कि परत कुछ समय के लिए स्ट्रिंग. 32 00:01:28,180 --> 00:01:30,670 और हम एक स्ट्रिंग क्या कहा वास्तव में पिछले सप्ताह है? 33 00:01:30,670 --> 00:01:31,720 34 00:01:31,720 --> 00:01:32,900 तो चार सितारा. 35 00:01:32,900 --> 00:01:34,900 और चार सितारा, ठीक है, क्या कि वास्तव में क्या मतलब था? 36 00:01:34,900 --> 00:01:37,150 खैर, यह सब समय, हम है अगर एक समारोह बुला रहा, 37 00:01:37,150 --> 00:01:40,450 getString, और भंडारण की तरह तथाकथित वापसी 38 00:01:40,450 --> 00:01:42,910 एक में getString का मूल्य variable-- यह कहा जाता है 39 00:01:42,910 --> 00:01:47,721 हम लिख रहे हैं string-- प्रकार वहाँ ऊपर कोड की लाइन. 40 00:01:47,721 --> 00:01:49,970 मैं देख रहा हूँ और जब यह केवल मेरी लिखावट यहाँ बढ़ाया 41 00:01:49,970 --> 00:01:51,930 मैं इस बस कैसे नृशंस महसूस करते हैं. 42 00:01:51,930 --> 00:01:54,180 >> हालांकि, चलो मान लेते हैं कि, दाएँ हाथ की ओर 43 00:01:54,180 --> 00:01:57,070 फिर भी, एक उचित है क्या का चित्रण 44 00:01:57,070 --> 00:01:58,880 यह सब चल रहा getString साथ समय. 45 00:01:58,880 --> 00:02:00,380 getString, ज़ाहिर है, एक स्ट्रिंग हो जाता है. 46 00:02:00,380 --> 00:02:01,691 लेकिन यह है कि वास्तव में क्या मतलब है? 47 00:02:01,691 --> 00:02:04,190 यह इसका एक हिस्सा हो जाता है इसका मतलब ऑपरेटिंग सिस्टम से स्मृति 48 00:02:04,190 --> 00:02:06,040 एक समारोह को फोन करके, malloc बुलाया. 49 00:02:06,040 --> 00:02:07,390 लेकिन अधिक है कि बाद में. 50 00:02:07,390 --> 00:02:09,139 और फिर यह भरता स्मृति की है कि हिस्सा 51 00:02:09,139 --> 00:02:11,764 पत्र के साथ उपयोगकर्ता है , में टाइप द्वारा पीछा किया, ज़ाहिर है, 52 00:02:11,764 --> 00:02:14,800 एक अशक्त चरित्र, या बैकस्लैश बहुत अंत में शून्य. 53 00:02:14,800 --> 00:02:18,280 >> इस बीच, बाएं हाथ की ओर इस कहानी की, यह सब समय, 54 00:02:18,280 --> 00:02:20,850 हम की तरह, एक चर घोषित किया गया है. 55 00:02:20,850 --> 00:02:24,770 और कहा कि चर अब क्या है एक सूचक बुला शुरू कर देंगे. 56 00:02:24,770 --> 00:02:29,190 यह जो के अंदर एक बॉक्स नहीं है हम स्ट्रिंग डाल, Daven, दर असल, 57 00:02:29,190 --> 00:02:32,550 बल्कि हम उस वर्ग में नहीं डाल बाएं क्या बिल्कुल पर बॉक्स? 58 00:02:32,550 --> 00:02:34,890 59 00:02:34,890 --> 00:02:35,390 हाँ? 60 00:02:35,390 --> 00:02:37,118 >> दर्शक: के पते जहां यह स्मृति में स्थित है. 61 00:02:37,118 --> 00:02:38,118 >> डेविड जे Malan: बिल्कुल. 62 00:02:38,118 --> 00:02:40,690 Daven जहां के पते स्मृति में स्थित है. 63 00:02:40,690 --> 00:02:44,650 और Daven के सभी, स्थित है नहीं जहां दर असल, लेकिन विशेष रूप से पता 64 00:02:44,650 --> 00:02:45,150 क्या की? 65 00:02:45,150 --> 00:02:46,311 66 00:02:46,311 --> 00:02:46,810 हाँ? 67 00:02:46,810 --> 00:02:47,460 >> दर्शक: प्रथम चरित्र. 68 00:02:47,460 --> 00:02:50,209 >> डेविड जे Malan: प्रथम चरित्र इस मामले में Daven, जो, में, 69 00:02:50,209 --> 00:02:53,820 मैं मनमाने ढंग से किया गया था प्रस्ताव और unrealistically 1, OX1, 70 00:02:53,820 --> 00:02:55,910 जो सिर्फ मतलब 1 की हेक्साडेसिमल संख्या. 71 00:02:55,910 --> 00:02:57,993 लेकिन यह शायद जा रहा है एक बहुत बड़ी संख्या होने के लिए 72 00:02:57,993 --> 00:03:01,260 हम आकर्षित हो सकता है कि एक उपसर्ग के रूप में एक 0x से, 73 00:03:01,260 --> 00:03:02,806 एक हेक्साडेसिमल चरित्र का प्रतिनिधित्व. 74 00:03:02,806 --> 00:03:05,930 और हम जानते हैं कि कहां की जरूरत नहीं है क्योंकि Daven के पात्रों के बाकी 75 00:03:05,930 --> 00:03:09,860 की वजह से कर रहे हैं, क्या साधारण डिजाइन निर्णय कई साल पहले बनाया गया था? 76 00:03:09,860 --> 00:03:10,548 हाँ? 77 00:03:10,548 --> 00:03:11,651 >> दर्शक: बैकस्लैश 0. 78 00:03:11,651 --> 00:03:12,900 डेविड जे Malan: हाँ, बिल्कुल. 79 00:03:12,900 --> 00:03:18,100 बैकस्लैश 0 में हालांकि, आप की अनुमति देता है रैखिक समय, स्ट्रिंग पार करने के लिए, 80 00:03:18,100 --> 00:03:20,400 बाएं से दाएं चलना, एक पाश के लिए, या एक समय के साथ 81 00:03:20,400 --> 00:03:22,608 पाश, या कुछ और की तरह कि, और यहाँ, ओह, यह निर्धारित 82 00:03:22,608 --> 00:03:24,751 इस विशेष स्ट्रिंग का अंत है. 83 00:03:24,751 --> 00:03:27,000 पर अभी पते के साथ तो एक स्ट्रिंग की शुरुआत 84 00:03:27,000 --> 00:03:30,290 हम की संपूर्णता का उपयोग कर सकते हैं यह सब करते हुए, क्योंकि 85 00:03:30,290 --> 00:03:32,030 एक स्ट्रिंग सिर्फ एक चार सितारा कर दिया गया है. 86 00:03:32,030 --> 00:03:36,370 >> इसलिए इसे का उपयोग जारी रखने के लिए निश्चित रूप से ठीक है CS50 पुस्तकालय और इस अमूर्त, 87 00:03:36,370 --> 00:03:38,440 तो बात है, लेकिन हम करेंगे वास्तव में देखना शुरू 88 00:03:38,440 --> 00:03:41,230 क्या चल रहा है इस पूरे समय के नीचे. 89 00:03:41,230 --> 00:03:45,260 तो आप इस उदाहरण याद कर सकते हैं, भी, पिछली बार से, 0 तुलना, 90 00:03:45,260 --> 00:03:47,300 जो वास्तव में तुलना नहीं की थी. 91 00:03:47,300 --> 00:03:49,070 लेकिन हम इस को हल करने के लिए शुरू किया. 92 00:03:49,070 --> 00:03:52,020 >> लेकिन शायद एक पुनश्चर्या, मैं किसी को ब्याज सकता है 93 00:03:52,020 --> 00:03:54,261 एक गुलाबी हाथी में आज, भी चांग द्वारा किए गए? 94 00:03:54,261 --> 00:03:55,760 कैसे सामने आप के बारे में? [अश्राव्य]. 95 00:03:55,760 --> 00:03:56,660 ऊपर आओ. 96 00:03:56,660 --> 00:03:58,740 >> और इस बीच में, आप आने के रूप में, चलो 97 00:03:58,740 --> 00:04:01,670 बस एक पल के लिए क्या विचार इस कोड वास्तव में क्या कर रहा था. 98 00:04:01,670 --> 00:04:04,917 यह दो चर की घोषणा की है शीर्ष, एस टी, और getString बुला. 99 00:04:04,917 --> 00:04:08,250 यह एक बहुत उपयोगकर्ता के अनुकूल कार्यक्रम नहीं है यह आपको बता नहीं है क्योंकि क्या करना है. 100 00:04:08,250 --> 00:04:10,541 लेकिन अभी हम कर रहे हैं मान के चलो रसदार हिस्से पर केंद्रित थी. 101 00:04:10,541 --> 00:04:14,470 एस के बराबर होती है और अगर है तो हम करते हैं , यह printf कहना चाहिए टी के बराबर होती है, 102 00:04:14,470 --> 00:04:16,170 आप एक ही बात टाइप. 103 00:04:16,170 --> 00:04:16,670 नमस्कार. 104 00:04:16,670 --> 00:04:17,050 आपका नाम क्या है? 105 00:04:17,050 --> 00:04:17,779 >> Janelle: Janelle. 106 00:04:17,779 --> 00:04:19,529 डेविड जे Malan: Janelle, आपसे मिलकर अच्छा लगा. 107 00:04:19,529 --> 00:04:21,800 पर अपनी चुनौती तो इस हाथी के लिए हाथ 108 00:04:21,800 --> 00:04:25,230 पहले हमें क्या है की एक तस्वीर आकर्षित करने के लिए है उन पहले दो में प्रतिनिधित्व किया जा रहा 109 00:04:25,230 --> 00:04:25,970 लाइनों. 110 00:04:25,970 --> 00:04:28,139 तो एस और टी हो सकता है कैसे स्क्रीन पर प्रतिनिधित्व? 111 00:04:28,139 --> 00:04:30,680 और तुम बस के साथ यह आकर्षित कर सकते हैं इस बड़े परदे पर अपनी उंगली. 112 00:04:30,680 --> 00:04:31,780 113 00:04:31,780 --> 00:04:34,510 >> तो करने दो हिस्सों वहाँ कि समीकरण के दोनों ओर. 114 00:04:34,510 --> 00:04:37,760 तो वहाँ छोड़ दिया पर है, और तो ठीक है पर getString. 115 00:04:37,760 --> 00:04:40,540 और फिर टी, बाईं तरफ वहाँ और फिर सही पर getString. 116 00:04:40,540 --> 00:04:42,630 तो हम कैसे शुरू हो सकता है एक तस्वीर खींचने कि 117 00:04:42,630 --> 00:04:46,340 क्या हो रहा है का प्रतिनिधित्व करता है यहाँ स्मृति में, आप कहेंगे? 118 00:04:46,340 --> 00:04:49,150 और मैं आपको समझाने जाने तुम जाओ के रूप में आप क्या कर रहे हैं. 119 00:04:49,150 --> 00:04:49,820 >> Janelle: ठीक है. 120 00:04:49,820 --> 00:04:58,890 खैर, सबसे पहले, यह पूछ रही हो जाएगा आप इनपुट स्ट्रिंग प्राप्त करने के लिए. 121 00:04:58,890 --> 00:05:00,439 और यह खेद, ओह store-- होगा. 122 00:05:00,439 --> 00:05:01,230 डेविड जे Malan: ठीक है. 123 00:05:01,230 --> 00:05:01,730 अच्छा. 124 00:05:01,730 --> 00:05:03,330 और यह क्या कहा जाता है? 125 00:05:03,330 --> 00:05:03,950 ठीक है, ओह. 126 00:05:03,950 --> 00:05:04,450 बढ़ते रहें. 127 00:05:04,450 --> 00:05:05,575 मैं बाधित करने के लिए मतलब नहीं था. 128 00:05:05,575 --> 00:05:07,060 Janelle: क्षमा करें. 129 00:05:07,060 --> 00:05:14,237 तो यह इनपुट में यह होगा पता यकीन नहीं of--. 130 00:05:14,237 --> 00:05:17,320 मैं वास्तव में नंबर याद नहीं कर सकते हैं, लेकिन मैं यह 0 के साथ शुरू किया गया था विश्वास करते हैं. 131 00:05:17,320 --> 00:05:18,420 >> डेविड जे Malan: यह सब ठीक है मैं संख्या से बना है, क्योंकि 132 00:05:18,420 --> 00:05:19,650 तो कोई सही जवाब है. 133 00:05:19,650 --> 00:05:22,105 >> Janelle: 0 चाप के साथ शुरू. 134 00:05:22,105 --> 00:05:24,000 >> डेविड जे Malan: ठीक है, तो तत्व 0. 135 00:05:24,000 --> 00:05:24,765 ज़रूर. 136 00:05:24,765 --> 00:05:28,295 >> Janelle: और फिर था बस एक दो letter-- तरह 137 00:05:28,295 --> 00:05:30,496 >> डेविड जे Malan: ठीक है, तुम्हें वापस करने के लिए. 138 00:05:30,496 --> 00:05:33,629 >> Janelle: तो तत्व 0, और तब तत्व 1 या तत्व 2. 139 00:05:33,629 --> 00:05:36,670 जो टुकड़ा और: डेविड जे Malan तस्वीर आप अभी बैठक कर रहे हैं? 140 00:05:36,670 --> 00:05:37,690 getString को कॉल? 141 00:05:37,690 --> 00:05:38,830 या एस की घोषणा? 142 00:05:38,830 --> 00:05:42,890 >> Janelle: घोषणा एस के, मुझे विश्वास है. 143 00:05:42,890 --> 00:05:45,980 ओह, getString, यह होगा क्योंकि प्रत्येक [में inputted किया? क्षेत्र. ?] 144 00:05:45,980 --> 00:05:46,510 >> डेविड जे Malan: अच्छा. 145 00:05:46,510 --> 00:05:47,051 बिल्कुल सही. 146 00:05:47,051 --> 00:05:49,300 यहां तक ​​कि यह प्रभावी हालांकि एक सरणी, याद देता है, 147 00:05:49,300 --> 00:05:53,300 हम एक स्ट्रिंग वापस मिलता है, हम कर सकते हैं 01 और 2 का उपयोग कर कि स्ट्रिंग में सूचकांक. 148 00:05:53,300 --> 00:05:56,180 तकनीकी तौर पर, ये शायद हैं व्यक्तिगत पतों द्वारा प्रतिनिधित्व, 149 00:05:56,180 --> 00:05:57,100 लेकिन वह ठीक है. 150 00:05:57,100 --> 00:06:00,170 >> तो, लगता है अगर मैं सिर्फ तेजी से कर सकते हैं हम से दूर छोड़ दिया, जहां से आगे 151 00:06:00,170 --> 00:06:04,320 पिछली बार से एक अगर तार, एक बी ई जी था 152 00:06:04,320 --> 00:06:10,337 बैकस्लैश 0, जिससे प्रतिनिधित्व करने Gabe की इनपुट, कैसे हम अब प्रतिनिधित्व हो सकता है? 153 00:06:10,337 --> 00:06:12,670 इस है कि स्मृति है getString से लौटा दिया गया? 154 00:06:12,670 --> 00:06:14,415 155 00:06:14,415 --> 00:06:17,610 >> Janelle: यह होगा एक चाप से प्रतिनिधित्व? 156 00:06:17,610 --> 00:06:18,750 >> डेविड जे Malan: एक चाप द्वारा? 157 00:06:18,750 --> 00:06:19,130 नहीं, ठीक है. 158 00:06:19,130 --> 00:06:21,171 , चलो बस pictorially, हम कहते हैं मुझे बस आगे चलते हैं 159 00:06:21,171 --> 00:06:25,710 इस s है और, यदि यह प्रस्ताव है कि getString की मान है. 160 00:06:25,710 --> 00:06:29,482 और तुम 0, 1, 2, के रूप में यह तैयार किया है जो , पूरी तरह से उचित है क्योंकि हम 161 00:06:29,482 --> 00:06:30,940 जैसे स्ट्रिंग में सूचकांक कर सकते हैं. 162 00:06:30,940 --> 00:06:33,340 लेकिन बस के अनुरूप होना पिछली बार, मुझे आगे चलते हैं 163 00:06:33,340 --> 00:06:37,310 और मनमाने ढंग से यह प्रस्ताव है कि 1 पता है, इस पते 2 है, 164 00:06:37,310 --> 00:06:39,597 यह तो आगे पता 3, और है. 165 00:06:39,597 --> 00:06:41,430 और हां, सिर्फ सुपर होने की स्पष्ट है, क्या हो रहा है 166 00:06:41,430 --> 00:06:44,580 इस बात का एक परिणाम के रूप में एस में जाने के लिए कोड की पहली पंक्ति, आप कहेंगे? 167 00:06:44,580 --> 00:06:45,420 >> Janelle: 1 पता? 168 00:06:45,420 --> 00:06:46,420 >> डेविड जे Malan: बिल्कुल. 169 00:06:46,420 --> 00:06:47,190 तो 0x1 पता. 170 00:06:47,190 --> 00:06:48,220 171 00:06:48,220 --> 00:06:51,230 और इस बीच, मुझे आगे चलते हैं और तुम क्या किया है की ज्यादा नकल 172 00:06:51,230 --> 00:06:52,740 और यहाँ मेरे अपने टी जोड़ें. 173 00:06:52,740 --> 00:06:56,340 मैं Gabe में टाइप करने के लिए गए थे फिर, एक दूसरी बार, 174 00:06:56,340 --> 00:07:01,530 getString साथ प्रेरित कब, कहाँ, बेशक, Gabe जाना जा रहा है? 175 00:07:01,530 --> 00:07:02,280 खैर, presumably-- 176 00:07:02,280 --> 00:07:04,935 177 00:07:04,935 --> 00:07:05,975 >> Janelle: यहाँ पर की तरह? 178 00:07:05,975 --> 00:07:06,850 डेविड जे Malan: हाँ. 179 00:07:06,850 --> 00:07:08,516 Janelle: या यह एक ही बॉक्स में भी है? 180 00:07:08,516 --> 00:07:11,940 डेविड जे Malan: मेरे हाँ, का प्रस्ताव करते हैं वास्तव में, इन अतिरिक्त बक्से में तो. 181 00:07:11,940 --> 00:07:15,230 लेकिन क्या अब कुंजी भी है कि, मैं इन बहुत करीब खींचा है, हालांकि 182 00:07:15,230 --> 00:07:18,650 together-- 0x1, इस वास्तविकता में 0x2-- है, 183 00:07:18,650 --> 00:07:25,750 यह अब, पते 0x10 हो सकता है उदाहरण के लिए, और 0x11, और 0x12, 184 00:07:25,750 --> 00:07:26,870 और बहुत आगे है. 185 00:07:26,870 --> 00:07:29,955 और हां, अगर ऐसी बात है, क्या टी में यहाँ समाप्त करने के लिए हो रहा है? 186 00:07:29,955 --> 00:07:30,830 >> Janelle: 0x10? 187 00:07:30,830 --> 00:07:31,830 डेविड जे Malan: बिल्कुल. 188 00:07:31,830 --> 00:07:33,180 तो 0x10. 189 00:07:33,180 --> 00:07:34,570 और इसलिए अब, अंतिम प्रश्न. 190 00:07:34,570 --> 00:07:37,510 तुम्हें पता है, दूर से, काम करने के लिए पड़ा है इस प्रकार अब तक एक हाथी के लिए सबसे मुश्किल. 191 00:07:37,510 --> 00:07:42,650 अब तक, मैं कोड को खींच अगर फिर, जब मैं, लाइन तीन में, 192 00:07:42,650 --> 00:07:47,630 एस के बराबर होती है टी के बराबर होती है, तो मैं वास्तव में क्या कर रहा हूँ हम यहाँ तैयार किया है की तुलना है? 193 00:07:47,630 --> 00:07:49,271 >> Janelle: दो पतों? 194 00:07:49,271 --> 00:07:50,270 डेविड जे Malan: बिल्कुल. 195 00:07:50,270 --> 00:07:53,350 तो मैं टी के बराबर बराबर एस कह रहा हूँ? 196 00:07:53,350 --> 00:07:56,210 दूसरे शब्दों में, 10 को बराबर बराबर 1 है? 197 00:07:56,210 --> 00:07:59,710 और हां, स्पष्ट जवाब अब नहीं है. 198 00:07:59,710 --> 00:08:02,920 और इसलिए इस कार्यक्रम में अंततः है आप क्या कहेंगे, मुद्रित करने के लिए जा रहे हैं? 199 00:08:02,920 --> 00:08:05,770 200 00:08:05,770 --> 00:08:08,405 >> Janelle: यह होगा आप एक ही बात टाइप किया? 201 00:08:08,405 --> 00:08:11,446 >> डेविड जे Malan: तो अगर एस 1 और टी 10 है? 202 00:08:11,446 --> 00:08:13,320 >> Janelle: आप अलग अलग चीजें टाइप. 203 00:08:13,320 --> 00:08:13,570 >> डेविड जे Malan: बिल्कुल. 204 00:08:13,570 --> 00:08:14,480 आप अलग अलग चीजें टाइप. 205 00:08:14,480 --> 00:08:14,850 ठीक है. 206 00:08:14,850 --> 00:08:16,714 तो प्रशंसा का एक दौर, यहाँ, हम कर सकते हैं. 207 00:08:16,714 --> 00:08:17,214 [वाहवाही] 208 00:08:17,214 --> 00:08:17,708 उस दर्दनाक था. 209 00:08:17,708 --> 00:08:18,208 मुझे पता है. 210 00:08:18,208 --> 00:08:19,684 अच्छी तरह से किया. 211 00:08:19,684 --> 00:08:24,690 तो अब चलो देखते हैं अगर हम नहीं कर सकते तय किया गया था कि क्या अलग तंग. 212 00:08:24,690 --> 00:08:28,040 और हां, हम this-- तय जब जो मैं अब green-- में प्रतिनिधित्व करेंगे 213 00:08:28,040 --> 00:08:29,690 हम यहाँ संवर्द्धन की एक जोड़ी किया. 214 00:08:29,690 --> 00:08:32,409 सबसे पहले, बस एक विवेक के रूप में मैं पहली बार देख रहा हूँ, जाँच 215 00:08:32,409 --> 00:08:35,110 एस शून्य के बराबर होती है और टी शून्य के बराबर होती है. 216 00:08:35,110 --> 00:08:39,440 और अभी स्पष्ट होना करने के लिए, जब हो सकता है एस टी या इस तरह कोड में अशक्त हो? 217 00:08:39,440 --> 00:08:43,140 218 00:08:43,140 --> 00:08:44,490 जब एस टी या अशक्त हो सकता है. 219 00:08:44,490 --> 00:08:44,990 हाँ? 220 00:08:44,990 --> 00:08:45,990 >> दर्शक: [अश्राव्य]. 221 00:08:45,990 --> 00:08:49,490 222 00:08:49,490 --> 00:08:50,510 >> डेविड जे Malan: बिल्कुल. 223 00:08:50,510 --> 00:08:52,840 स्ट्रिंग उपयोगकर्ता कि यदि में टाइप रास्ता बहुत लंबा है 224 00:08:52,840 --> 00:08:56,140 स्मृति में फिट, या कुछ करने के लिए ऐसा अजीब कोने मामला है, 225 00:08:56,140 --> 00:08:59,010 हम देखेंगे के रूप में सचमुच, getString आज, अपने दस्तावेज़ में, 226 00:08:59,010 --> 00:09:02,330 यह रूप में अशक्त लौटने का कहना है एक विशेष प्रहरी मूल्य, 227 00:09:02,330 --> 00:09:05,417 या बस की तरह एक विशेष प्रतीक कि कुछ गलत हो गया था मतलब है. 228 00:09:05,417 --> 00:09:07,500 इसलिए हम के लिए जाँच करना चाहते हैं यह पता चला है कि, क्योंकि 229 00:09:07,500 --> 00:09:09,720 कि अशक्त एक बहुत ही खतरनाक मान है. 230 00:09:09,720 --> 00:09:14,250 >> अक्सर, आप के साथ कुछ करने की कोशिश अशक्त इसे पारित एक function-- शामिल 231 00:09:14,250 --> 00:09:17,470 निवेश के रूप में, कि समारोह instance-- के लिए बहुत इसके साथ, दुर्घटना और होगा हो सकता है, 232 00:09:17,470 --> 00:09:19,090 अपने पूरे कार्यक्रम नीचे ले. 233 00:09:19,090 --> 00:09:22,570 तो इस तीसरी लाइन अब सिर्फ एक विवेक है अगर तुम जाएगा, त्रुटि जाँच की जाँच करें. 234 00:09:22,570 --> 00:09:25,450 उस के लिए अब एक अच्छी आदत है हमें किसी भी समय में प्राप्त करने के लिए हम 235 00:09:25,450 --> 00:09:28,050 एक मूल्य का उपयोग करने का प्रयास करें कि , संभावित, अशक्त हो सकता है. 236 00:09:28,050 --> 00:09:32,000 >> अब, यहाँ चौथी लाइन में, "अगर strcmp (एस, टी)," ठीक है, 237 00:09:32,000 --> 00:09:33,180 क्या करने के लिए बात है? 238 00:09:33,180 --> 00:09:36,750 खैर, हम इस बहुत संक्षेप में एक ने कहा कि स्ट्रिंग तुलना के लिए नामित समारोह. 239 00:09:36,750 --> 00:09:40,370 और जीवन में अपने उद्देश्य की तुलना है दूसरा इसके खिलाफ अपना पहला तर्क, 240 00:09:40,370 --> 00:09:44,640 लेकिन नहीं उनके पते के संदर्भ में, हम एक क्षण अनजाने रूप में किया था 241 00:09:44,640 --> 00:09:48,270 पहले लाल कोड के साथ, लेकिन बल्कि उन दोनों की तुलना करने के लिए 242 00:09:48,270 --> 00:09:53,210 आदमियत सहज ज्ञान युक्त में तार इस के खिलाफ, इस तुलना करके रास्ता, 243 00:09:53,210 --> 00:09:56,690 यह इस के खिलाफ, और के खिलाफ फिर रोक जब यदि एक और 244 00:09:56,690 --> 00:09:59,590 या अपनी उंगलियों के दोनों एक बैकस्लैश 0 हिट. 245 00:09:59,590 --> 00:10:04,530 तो किसी साल पहले लागू किया strcmp कार्यक्षमता हमारे लिए लागू करने के लिए 246 00:10:04,530 --> 00:10:08,890 हम हम मिल गया होता आशा व्यक्त की कि सिर्फ दो सरल मूल्यों की तुलना द्वारा. 247 00:10:08,890 --> 00:10:14,929 >> अब स्पष्ट रूप से, मैं ड्राइंग रखना इन विभिन्न संख्या के सभी. 248 00:10:14,929 --> 00:10:17,470 लेकिन वास्तविकता यह है कि मैं कर रहा हूँ, है पूरे समय इन ऊपर बना रही है. 249 00:10:17,470 --> 00:10:19,580 और इसलिए मुझे बस आगे चलते हैं और इन बाहर घसीटना 250 00:10:19,580 --> 00:10:23,100 एक बिंदु बनाने के लिए है कि, अंत में दिन की और आगे बढ़ने, 251 00:10:23,100 --> 00:10:30,160 हम वास्तव में के बारे में देखभाल करने के लिए नहीं जा रहे हैं क्या चीजें वास्तव में कर रहे हैं के पते 252 00:10:30,160 --> 00:10:30,790 स्मृति में. 253 00:10:30,790 --> 00:10:34,320 इसलिए मैं इन आकर्षित करने के लिए नहीं जा रहा हूँ इसलिए अब और ज्यादा संख्या के प्रकार, 254 00:10:34,320 --> 00:10:38,970 मैं दूर एक यह सिर्फ एक अमूर्त हूँ बस तीर के साथ अधिक अनुकूल थोड़ा. 255 00:10:38,970 --> 00:10:42,060 >> दूसरे शब्दों में, एक सूचक है, ठीक है, चलो बस सचमुच, यह आकर्षित करते हैं 256 00:10:42,060 --> 00:10:45,430 एक संकेत के रूप में, एक तीर इशारा करते हुए , कुछ और करने के लिए अपने आप से 257 00:10:45,430 --> 00:10:48,280 और के बारे में भी बहुत अधिक चिंता नहीं इन पतों के minutia 258 00:10:48,280 --> 00:10:49,910 जो, फिर से, मैं वैसे भी बना हुआ है. 259 00:10:49,910 --> 00:10:52,680 लेकिन हम उन पतों देखेंगे, कभी कभी, कोड डिबगिंग जब. 260 00:10:52,680 --> 00:10:56,450 >> अब इस बीच, इस कार्यक्रम यहाँ ठीक करता है, ज़ाहिर है, 261 00:10:56,450 --> 00:10:58,720 तुलना करके कि समस्या उन दो तार. 262 00:10:58,720 --> 00:11:00,260 लेकिन हम एक और समस्या में भाग गया. 263 00:11:00,260 --> 00:11:03,180 यह कॉपी से था पिछले समय कार्यक्रम 264 00:11:03,180 --> 00:11:06,880 जिससे, मैं भुनाने की कोशिश कर रहा था एक स्ट्रिंग में सिर्फ पहली चरित्र. 265 00:11:06,880 --> 00:11:09,620 लेकिन लक्षण क्या था हम जब आखिरी बार देखा था 266 00:11:09,620 --> 00:11:14,150 एक उपयोगकर्ता की तरह, एक मूल्य में टाइप लोअर केस में Gabe, एस के लिए, 267 00:11:14,150 --> 00:11:19,310 तो हम टी में है सौंपा वहाँ तीसरी पंक्ति में के रूप में, 268 00:11:19,310 --> 00:11:22,900 और फिर मैं करने की कोशिश की टी ब्रैकेट 0 भुनाने? 269 00:11:22,900 --> 00:11:25,950 के प्रभाव क्या था टी ब्रैकेट 0 यहाँ बदल रहा है? 270 00:11:25,950 --> 00:11:27,150 >> दर्शक: यह है बदल दिया है. 271 00:11:27,150 --> 00:11:29,360 >> डेविड जे Malan: हाँ, मैं भी, एस बदल दिया है. 272 00:11:29,360 --> 00:11:31,050 वास्तव में क्या चल रहा था क्योंकि? 273 00:11:31,050 --> 00:11:34,130 खैर, मैं साफ कर सकते हैं तो मुझे देखते हैं इस तस्वीर के ऊपर, के रूप में इस प्रकार है. 274 00:11:34,130 --> 00:11:41,390 >> S है, तो फिर, शब्द जी, ए, बी, ई, बैकस्लैश, 0, और एस 275 00:11:41,390 --> 00:11:44,084 हम एक बॉक्स के रूप में ड्राइंग जारी रखेंगे यहाँ, लेकिन अधिक नहीं पतों. 276 00:11:44,084 --> 00:11:45,250 की चीजों को बनाने बंद करो. 277 00:11:45,250 --> 00:11:47,510 चलो बस एक तस्वीर खींचना दुनिया को आसान बनाने के लिए. 278 00:11:47,510 --> 00:11:52,640 >> मैं स्ट्रिंग टी के साथ टी की घोषणा करते हैं, कि स्मृति की है कि हिस्सा बनाता है. 279 00:11:52,640 --> 00:11:55,850 वर्ग 32 होना होता है सबसे अधिक कंप्यूटरों में बिट्स. 280 00:11:55,850 --> 00:11:59,530 वास्तव में, यदि आप कभी एक के बारे में सुना है कंप्यूटर, एक 32 बिट वास्तुकला होने 281 00:11:59,530 --> 00:12:03,000 वास्तव में फैंसी बात करते हैं, कि बस यह 32 बिट पते का उपयोग करता है इसका मतलब है. 282 00:12:03,000 --> 00:12:05,370 और एक तरफ एक तकनीकी रूप में, क्या आपने कभी सोचा है अगर 283 00:12:05,370 --> 00:12:09,630 क्यों पुराने कंप्यूटर, वास्तव में आप अगर राम की बहुत सारी के साथ सूप उन्हें करने की कोशिश की, 284 00:12:09,630 --> 00:12:12,360 केवल एक अधिकतम हो सकता था राम के चार गीगाबाइट की, 285 00:12:12,360 --> 00:12:14,860 अच्छी तरह से है कि सचमुच, क्योंकि है, अपने पुराने कंप्यूटर सकता है केवल 286 00:12:14,860 --> 00:12:17,250 4 के रूप में उच्च गिनती अरब, 4 अरब बाइट्स, 287 00:12:17,250 --> 00:12:20,590 इसकी वजह यह 32 बिट का उपयोग कर रहा था पतों के लिए संख्या. 288 00:12:20,590 --> 00:12:23,260 >> लेकिन किसी भी मामले में, इस में उदाहरण, कहानी का बहुत सरल. 289 00:12:23,260 --> 00:12:27,250 टी सिर्फ एक सूचक है, या वास्तव में एक चार सितारा, उर्फ ​​स्ट्रिंग. 290 00:12:27,250 --> 00:12:30,860 और कैसे मैं इस तस्वीर अपडेट करना चाहते हैं अब कोड की है कि दूसरी पंक्ति के साथ, 291 00:12:30,860 --> 00:12:31,950 डॉट के बाद, दूरसंचार विभाग, डॉट? 292 00:12:31,950 --> 00:12:35,845 जब मैं स्ट्रिंग टी, एस अर्धविराम के बराबर होती है इस तस्वीर कैसे बदल जाता है? 293 00:12:35,845 --> 00:12:37,500 294 00:12:37,500 --> 00:12:38,000 हाँ? 295 00:12:38,000 --> 00:12:38,916 >> दर्शक: [अश्राव्य]. 296 00:12:38,916 --> 00:12:41,087 297 00:12:41,087 --> 00:12:42,020 >> डेविड जे Malan: हाँ. 298 00:12:42,020 --> 00:12:42,600 बिल्कुल सही. 299 00:12:42,600 --> 00:12:45,620 मैं बस से एक तीर डाल एक ही पते पर टी बॉक्स, 300 00:12:45,620 --> 00:12:47,570 में एक ही पहला पत्र दे दिया. 301 00:12:47,570 --> 00:12:50,850 या तकनीकी तौर पर, अगर इस लड़का, 0x1 पर अभी भी थे 302 00:12:50,850 --> 00:12:53,052 मैं था के रूप में हालांकि यह बात है यहाँ 0x1 और यहाँ 0x1. 303 00:12:53,052 --> 00:12:54,760 लेकिन फिर, कौन परवाह करता है पतों के बारे में? 304 00:12:54,760 --> 00:12:56,345 अब यह मायने रखता है कि सिर्फ विचार है. 305 00:12:56,345 --> 00:12:57,720 तो यह यहाँ क्या हो रहा है. 306 00:12:57,720 --> 00:13:02,690 जाहिर है, अगर आप ऐसा करेंगे टी ब्रैकेट तो सरणी संकेतन है जो 0,, 307 00:13:02,690 --> 00:13:05,650 के course-- और स्पष्ट रूप से, यह लग रहा है यहाँ पर एक सरणी जैसे वहाँ, 308 00:13:05,650 --> 00:13:07,340 लेकिन अब यह अजीब बात है. 309 00:13:07,340 --> 00:13:11,160 कि प्रोग्रामिंग भाषा जानते हैं, सी,, आप इस सुविधा प्रदान करता है 310 00:13:11,160 --> 00:13:14,650 जिससे, टी एक है, भले ही सूचक, या एक सूचक है, 311 00:13:14,650 --> 00:13:18,050 आप अभी भी उस परिचित उपयोग कर सकते हैं आरामदायक वर्ग ब्रैकेट 312 00:13:18,050 --> 00:13:22,520 अंकन पहले तत्व के लिए जाने के लिए, दूसरा तत्व है, या किसी भी तत्व या 313 00:13:22,520 --> 00:13:26,130 कि सूचक इशारा कर रहा है कि के लिए शायद, क्योंकि यह 314 00:13:26,130 --> 00:13:29,410 इस मामले में, के रूप में है कुछ सरणी तरफ इशारा करते हुए. 315 00:13:29,410 --> 00:13:30,340 >> तो हम यह कैसे तय करते हैं? 316 00:13:30,340 --> 00:13:33,660 यह एक मिला जहां सच कहूँ तो, यह है पहली नज़र में थोड़ा भारी. 317 00:13:33,660 --> 00:13:35,340 लेकिन यहाँ एक नए और उन्नत संस्करण है. 318 00:13:35,340 --> 00:13:37,460 >> तो सबसे पहले, मैं जा रहा हूँ CS50 पुस्तकालय से छुटकारा, 319 00:13:37,460 --> 00:13:41,170 बस वास्तव में है कि एस बेनकाब करने के लिए एक चार सितारा, सिर्फ एक पर्याय. 320 00:13:41,170 --> 00:13:43,540 और टी भी एक चार सितारा है. 321 00:13:43,540 --> 00:13:48,290 लेकिन पर क्या हो रहा है उस रेखा के दाहिने हाथ की ओर 322 00:13:48,290 --> 00:13:49,970 टी एक मूल्य सौंपा है कहाँ? 323 00:13:49,970 --> 00:13:50,790 >> Malloc क्या है? 324 00:13:50,790 --> 00:13:51,630 यह क्या strlen है? 325 00:13:51,630 --> 00:13:52,547 Sizeof (चार) क्या है? 326 00:13:52,547 --> 00:13:54,380 क्यों बिल्ली इस करता है लाइन नज़र इतनी जटिल है? 327 00:13:54,380 --> 00:13:55,713 क्या यह एक उच्च स्तर पर कर रहा है? 328 00:13:55,713 --> 00:13:56,482 329 00:13:56,482 --> 00:13:57,440 क्या यह टी में भंडारण है? 330 00:13:57,440 --> 00:13:58,646 हाँ? 331 00:13:58,646 --> 00:14:01,104 दर्शक: यह आवंटन है एक स्मृति अंतरिक्ष की निश्चित राशि. 332 00:14:01,104 --> 00:14:03,032 यह स्टोर करने के लिए है, मुझे लगता है पत्र [अश्राव्य]. 333 00:14:03,032 --> 00:14:04,032 >> डेविड जे Malan: बिल्कुल सही. 334 00:14:04,032 --> 00:14:04,540 बिल्कुल सही. 335 00:14:04,540 --> 00:14:06,650 यह एक निश्चित आवंटन है स्मृति अंतरिक्ष की राशि 336 00:14:06,650 --> 00:14:08,940 , शायद, भविष्य पत्र की दुकान. 337 00:14:08,940 --> 00:14:11,310 और विशेष रूप से, malloc इसलिए क्या लौट रहा है? 338 00:14:11,310 --> 00:14:13,114 339 00:14:13,114 --> 00:14:14,851 >> दर्शक: [अश्राव्य] रिटर्निंग? 340 00:14:14,851 --> 00:14:15,850 डेविड जे Malan: बिल्कुल. 341 00:14:15,850 --> 00:14:18,850 कि स्मृति के पते रिटर्निंग, जो कह का एक अच्छा तरीका है, 342 00:14:18,850 --> 00:14:21,640 का पता देता है कि स्मृति की पहली बाइट. 343 00:14:21,640 --> 00:14:25,460 मुझे याद करने पर जिम्मेदारी है कितना स्मृति मैं वास्तव में 344 00:14:25,460 --> 00:14:27,140 आवंटित या के लिए malloc पूछा. 345 00:14:27,140 --> 00:14:28,384 >> अब जब कि कितना है? 346 00:14:28,384 --> 00:14:30,550 खैर, वहाँ है, भले ही यहाँ कोष्ठकों का एक बहुत, 347 00:14:30,550 --> 00:14:32,970 malloc सिर्फ एक ही तर्क लेता है. 348 00:14:32,970 --> 00:14:37,250 और मैं के strlen निर्दिष्ट, इसलिए दे रहा हूँ मुझे के रूप में कई बाइट्स एस में वहाँ के रूप में, 349 00:14:37,250 --> 00:14:37,800 लेकिन एक जोड़ें. 350 00:14:37,800 --> 00:14:38,300 क्यों? 351 00:14:38,300 --> 00:14:39,030 352 00:14:39,030 --> 00:14:39,530 हाँ? 353 00:14:39,530 --> 00:14:40,840 >> दर्शक: बैकस्लैश 0. 354 00:14:40,840 --> 00:14:41,840 डेविड जे Malan: बिल्कुल. 355 00:14:41,840 --> 00:14:43,423 हम एक छोटे से घर की देखरेख करने के लिए मिल गया है. 356 00:14:43,423 --> 00:14:45,970 एक बैकस्लैश क्योंकि वहाँ तो 0, हम बेहतर है कि याद होगी. 357 00:14:45,970 --> 00:14:47,310 अन्यथा, हम जा रहे हैं एक स्ट्रिंग बनाने के लिए 358 00:14:47,310 --> 00:14:49,170 कि विशेष टर्मिनेटर नहीं है. 359 00:14:49,170 --> 00:14:52,640 >> इस बीच, सिर्फ सुपर होने की गुदा, मैं, sizeof (चार) है 360 00:14:52,640 --> 00:14:55,730 सिर्फ मामले में किसी ने मेरे चलाता नहीं CS50 उपकरण पर कोड, 361 00:14:55,730 --> 00:14:58,220 लेकिन शायद एक अलग कंप्यूटर कुल मिलाकर जहां घर का काम 362 00:14:58,220 --> 00:15:01,470 सम्मेलन द्वारा, एक बाइट हैं, लेकिन दो बाइट्स, या उस से भी बड़ा कुछ. 363 00:15:01,470 --> 00:15:04,490 यह सिर्फ सुपर होने के लिए है, त्रुटियों को सुपर गुरेज. 364 00:15:04,490 --> 00:15:06,940 हालांकि, वास्तविकता में, यह है सबसे अधिक संभावना है 1 एक होने जा रहा. 365 00:15:06,940 --> 00:15:11,490 >> अब, इस बीच, मुझे आगे जाना है और कॉपी स्ट्रिंग, टी ब्रैकेट मैं टी ब्रैकेट एस के बराबर होती है. 366 00:15:11,490 --> 00:15:14,962 और मैं पिछले हफ्ते के लिए स्थगित होगी स्रोत कोड पर क्या हो रहा है देखने के लिए. 367 00:15:14,962 --> 00:15:17,670 कुंजी takeaway, और लेकिन कारण है कि मैं, हरे रंग में अब कोड डाल 368 00:15:17,670 --> 00:15:22,520 , कि बहुत अंतिम पंक्ति है, क्योंकि टी ब्रैकेट 0, toupper के बराबर होती है 369 00:15:22,520 --> 00:15:25,230 का असर है Capitalizing जो स्ट्रिंग? 370 00:15:25,230 --> 00:15:26,960 टी और / या है? 371 00:15:26,960 --> 00:15:29,280 372 00:15:29,280 --> 00:15:30,580 कोड की है कि पिछले लाइन. 373 00:15:30,580 --> 00:15:32,930 374 00:15:32,930 --> 00:15:35,560 >> क्या है क्योंकि बस, टी , इस समय हुआ 375 00:15:35,560 --> 00:15:41,500 मैं थोड़ा कि अंतिम चरण पूर्ववत हैं, मैं malloc कॉल क्या है, क्या हुआ है 376 00:15:41,500 --> 00:15:45,380 मैं अनिवार्य रूप से स्मृति का एक हिस्सा मिलता है कि मूल रूप में एक ही आकार है, 377 00:15:45,380 --> 00:15:47,020 कि गणित है क्योंकि मैंने किया. 378 00:15:47,020 --> 00:15:50,920 मैं पते टी में भंडारण कर रहा हूँ स्मृति की है कि हिस्सा की. 379 00:15:50,920 --> 00:15:53,370 यहां तक ​​कि यह अच्छा लग रहा है, हालांकि और, बहुत अच्छा और खाली, 380 00:15:53,370 --> 00:15:56,882 वास्तविकता क्या हम हूँ, वहाँ है यहाँ में, बुला कचरा मूल्यों रहते हैं. 381 00:15:56,882 --> 00:15:59,340 स्मृति का वह हिस्सा हो सकता है बहुत पहले अच्छी तरह से इस्तेमाल किया गया है, 382 00:15:59,340 --> 00:16:00,940 कुछ सेकंड के, कुछ ही मिनट पहले. 383 00:16:00,940 --> 00:16:04,410 तो बिल्कुल संख्या हो सकती है बस दुर्घटना से वहाँ या पत्र,. 384 00:16:04,410 --> 00:16:08,580 लेकिन वे मुझे जब तक, वैध नहीं हैं अपने आप को स्मृति का यह हिस्सा आबाद 385 00:16:08,580 --> 00:16:12,510 वास्तविक घर का काम के साथ, के रूप में मैं वहाँ पाश के लिए कि में करते हैं. 386 00:16:12,510 --> 00:16:13,180 ठीक है? 387 00:16:13,180 --> 00:16:16,180 >> तो अब, के चरमोत्कर्ष इन तीन उदाहरण 388 00:16:16,180 --> 00:16:20,730 प्रतीत होता है कि पिछली बार टूट गया इस स्वैप उदाहरण, इस समारोह 389 00:16:20,730 --> 00:16:23,670 भावना में काम किया यह एक और बी बदली है. 390 00:16:23,670 --> 00:16:25,620 लेकिन यह क्या अन्य अर्थों में काम नहीं किया? 391 00:16:25,620 --> 00:16:27,616 392 00:16:27,616 --> 00:16:28,614 हाँ? 393 00:16:28,614 --> 00:16:29,612 >> दर्शक: [अश्राव्य]. 394 00:16:29,612 --> 00:16:35,600 395 00:16:35,600 --> 00:16:36,700 >> डेविड जे Malan: बिल्कुल. 396 00:16:36,700 --> 00:16:39,530 मैं इस समारोह में कॉल करने के लिए गए थे उदाहरण के लिए another-- से, 397 00:16:39,530 --> 00:16:42,870 , जहां मुख्य तरह एक समारोह से मैं मैं के रूप में, एक चर, एक्स और वाई है 398 00:16:42,870 --> 00:16:46,160 पिछले हफ्ते किया था, उसी कोड, और मैं एक्स और वाई में पारित 399 00:16:46,160 --> 00:16:49,860 स्वैप, और फिर Swap-- इस कॉल करने के लिए, बेशक, सही संस्करण है 400 00:16:49,860 --> 00:16:52,220 हम करने के बारे में क्या कर रहे हैं है see-- यह काम नहीं किया. 401 00:16:52,220 --> 00:16:53,770 तो तय क्या है? 402 00:16:53,770 --> 00:16:56,850 >> खैर, तो बस होने के लिए स्पष्ट है, मुझे आगे चलते हैं 403 00:16:56,850 --> 00:17:05,450 and-- दूसरा यहां मुझे एक दे, और देखो मैं तुम्हें आखरी दिखा सकते हैं जो 404 00:17:05,450 --> 00:17:12,464 मुझे मिल सकता है चलो देखते हैं अगर in-- हो जाएगा इस असली fast-- ठीक है, [अश्राव्य]. 405 00:17:12,464 --> 00:17:18,440 406 00:17:18,440 --> 00:17:19,240 ठीक है, वहाँ यह है. 407 00:17:19,240 --> 00:17:21,000 इसलिए मैं सिर्फ टाइप कर रहा हूँ आदेशों की अनदेखी. 408 00:17:21,000 --> 00:17:23,780 मैं इसे प्राप्त करना चाहते हैं आखिरी मिनट एक उदाहरण 409 00:17:23,780 --> 00:17:27,960 पिछली बार से जो अब कोई स्वैप कहा जाता है. 410 00:17:27,960 --> 00:17:30,200 >> तो कोई स्वैप जहां है हम पिछली बार से दूर छोड़ दिया 411 00:17:30,200 --> 00:17:32,930 जिससे, मैं initialized 1 के लिए एक्स और 2 के लिए वाई. 412 00:17:32,930 --> 00:17:35,840 मैं तो 1 और 2 में गुजर, स्वैप कहते हैं. 413 00:17:35,840 --> 00:17:37,930 और फिर इस समारोह कुछ अर्थों में काम किया है, 414 00:17:37,930 --> 00:17:40,750 लेकिन यह कोई स्थायी था एक्स और वाई पर प्रभाव. 415 00:17:40,750 --> 00:17:45,430 तो हाथ पर सवाल कैसे अब, है हम वास्तव में इस समस्या को दूर करते हैं? 416 00:17:45,430 --> 00:17:47,820 हाथ पर समाधान क्या है? 417 00:17:47,820 --> 00:17:53,150 >> खैर, आज नया है जो swap.c, में, मतभेद के एक जोड़े को नोटिस. 418 00:17:53,150 --> 00:17:54,700 एक्स और वाई में ही हैं. 419 00:17:54,700 --> 00:17:57,250 लेकिन क्या स्पष्ट रूप से है रेखा 25 के बारे में अलग है? 420 00:17:57,250 --> 00:17:58,880 421 00:17:58,880 --> 00:18:01,715 अगर तुम्हें याद है क्या, वहाँ नया क्या है यह एक दूसरा पहले की तरह देखा क्या? 422 00:18:01,715 --> 00:18:02,565 >> दर्शक: [अश्राव्य]. 423 00:18:02,565 --> 00:18:03,440 >> डेविड जे Malan: हाँ. 424 00:18:03,440 --> 00:18:06,680 तो एम्परसेंड एक नया टुकड़ा वाक्य रचना की न केवल इस कार्यक्रम में, 425 00:18:06,680 --> 00:18:08,560 लेकिन यह भी अधिक आम तौर पर CS50 में. 426 00:18:08,560 --> 00:18:10,680 तिथि करने के लिए, मुझे नहीं लगता हम किसी भी उदाहरण देखा है 427 00:18:10,680 --> 00:18:14,070 या वास्तव में किसी में उनके बारे में बात की थी शायद, preemptively, के अलावा अन्य विस्तार, 428 00:18:14,070 --> 00:18:16,467 अनुभाग में, इस तरह एक एम्परसेंड. 429 00:18:16,467 --> 00:18:19,300 खैर, यह एम्परसेंड एक है पता चला है नई वाक्य रचना के अंतिम टुकड़े की 430 00:18:19,300 --> 00:18:20,174 हम सीखने जा रहे हैं. 431 00:18:20,174 --> 00:18:23,500 इसका मतलब है सभी है कुछ चर का पता. 432 00:18:23,500 --> 00:18:25,070 क्या पता एक्स रहता है? 433 00:18:25,070 --> 00:18:26,510 लेकिन वाई क्या पता रहता है? 434 00:18:26,510 --> 00:18:28,700 क्योंकि अगर पहले मौलिक समस्या 435 00:18:28,700 --> 00:18:32,970 कि एक्स और वाई पारित किया जा रहा था था हम वास्तव में क्या करना चाहते हैं प्रतियां, के रूप में 436 00:18:32,970 --> 00:18:38,780 एक खजाने की तरह साथ स्वैप प्रदान कर रहा है जहां एक्स और वास्तव में वाई की ओर जाता है कि नक्शा 437 00:18:38,780 --> 00:18:41,910 इतना है कि, रैम में हैं स्वैप कि मानचित्र का पालन कर सकते हैं 438 00:18:41,910 --> 00:18:47,760 एक्स या वाई स्थान अंक जहां कहीं और करने के लिए जाना और वास्तविक मूल्यों को बदलने 1 और 2 439 00:18:47,760 --> 00:18:48,270 क्या आप वहां मौजूद हैं. 440 00:18:48,270 --> 00:18:50,710 >> तो स्वैप भी थोड़ा परिवर्तन करने की जरूरत है. 441 00:18:50,710 --> 00:18:53,760 और पहली नज़र में, यह हो सकता है चार स्टार के लिए एक छोटे से समान लग रहे हैं. 442 00:18:53,760 --> 00:18:54,850 और वास्तव में यह है. 443 00:18:54,850 --> 00:18:59,635 तो एक डेटा किस प्रकार का एक सूचक है, इस पर प्रकाश डाला हिस्से के आधार पर? 444 00:18:59,635 --> 00:19:00,810 445 00:19:00,810 --> 00:19:01,620 तो यह एक पूर्णांक है. 446 00:19:01,620 --> 00:19:04,880 >> तो एक अब एक int है, यह एक पूर्णांक का पता है. 447 00:19:04,880 --> 00:19:07,910 और इसी तरह, बी अब जा रहा है एक पूर्णांक का पता हो. 448 00:19:07,910 --> 00:19:12,470 इसलिए मैं अब मुख्य से स्वैप कॉल करते हैं, मैं स्वैप 1 और 2 देने के लिए नहीं जा रहा हूँ. 449 00:19:12,470 --> 00:19:15,540 मैं जैसे यह देने जा रहा हूँ बैल कुछ और बैल कुछ, 450 00:19:15,540 --> 00:19:19,820 नेतृत्व करेंगे कि दो पतों उनके वास्तविक स्थानों के लिए स्वैप 451 00:19:19,820 --> 00:19:21,310 अपने कंप्यूटर की स्मृति में. 452 00:19:21,310 --> 00:19:25,580 >> तो अब, मेरे शेष कार्यान्वयन एक बालक को बदलने की जरूरत है. 453 00:19:25,580 --> 00:19:28,650 क्या अब स्पष्ट रूप से अलग है कोड के इन तीन पंक्तियों में? 454 00:19:28,650 --> 00:19:31,350 इन सभी लानत सितारे नहीं है जगह, सब ठीक है? 455 00:19:31,350 --> 00:19:33,014 तो क्या यहाँ पर हो रहा है? 456 00:19:33,014 --> 00:19:33,514 हाँ? 457 00:19:33,514 --> 00:19:35,055 >> दर्शक: यह [अश्राव्य] जाहिर है. 458 00:19:35,055 --> 00:19:36,832 459 00:19:36,832 --> 00:19:37,990 >> डेविड जे Malan: बिल्कुल. 460 00:19:37,990 --> 00:19:41,560 इस context-- में तो और यह नहीं था सर्वश्रेष्ठ डिजाइन निर्णय, बेशक, 461 00:19:41,560 --> 00:19:42,530 साल पहले. 462 00:19:42,530 --> 00:19:45,110 इस संदर्भ में, जहां में तुम सिर्फ एक सितारा है, 463 00:19:45,110 --> 00:19:48,240 और आप एक डेटा प्रकार नहीं है, पूर्णांक की तरह, तुरंत बाईं ओर, 464 00:19:48,240 --> 00:19:53,146 बजाय आप स्पष्ट रूप से, एक बराबर चिह्न है, इस संदर्भ में, जब आप कहते हैं एक सितारा, 465 00:19:53,146 --> 00:19:56,980 उस के लिए जाने का मतलब एक में है कि पता. 466 00:19:56,980 --> 00:19:58,870 इतनी बात करने के लिए, खजाने का नक्शा पालन करें. 467 00:19:58,870 --> 00:20:01,720 >> और इस बीच, रेखा 37 में, यह एक ही बात का मतलब है. 468 00:20:01,720 --> 00:20:05,460 पता करने के लिए जाओ, और क्या वहाँ रखा है? 469 00:20:05,460 --> 00:20:09,520 जो भी हो पर बी निर्दिष्ट करता है जो स्थान. 470 00:20:09,520 --> 00:20:10,980 दूसरे शब्दों में, बी के पास जाओ. 471 00:20:10,980 --> 00:20:12,130 कि मूल्य मिलता है. 472 00:20:12,130 --> 00:20:15,620 बराबर प्रति, एक के पास जाओ और हस्ताक्षर, असाइनमेंट ऑपरेटर, 473 00:20:15,620 --> 00:20:17,010 वहाँ कि मान रखा. 474 00:20:17,010 --> 00:20:19,272 >> इसी प्रकार, पूर्णांक अस्थायी बस एक पूर्णांक है. 475 00:20:19,272 --> 00:20:20,730 कुछ भी अस्थायी बारे में बदलने की जरूरत है. 476 00:20:20,730 --> 00:20:24,810 यह Annenberg से सिर्फ एक खाली गिलास है कुछ दूध या संतरे का रस के लिए. 477 00:20:24,810 --> 00:20:27,630 लेकिन मैं कहता हूँ, ख के लिए जाने की जरूरत है. 478 00:20:27,630 --> 00:20:31,449 उस गंतव्य के लिए जाने और वहाँ अस्थायी में मान रखा. 479 00:20:31,449 --> 00:20:32,490 तो फिर क्या हो रहा है? 480 00:20:32,490 --> 00:20:36,540 मैं वास्तव में अगर, इस बार स्वैप जब कॉल यह पहली ट्रे, यहाँ मुख्य प्रतिनिधित्व करता है 481 00:20:36,540 --> 00:20:42,270 इस दूसरी ट्रे स्वैप का प्रतिनिधित्व करता है, जब मैं एम्परसेंड एक्स और एम्परसेंड वाई पारित 482 00:20:42,270 --> 00:20:47,150 मुख्य स्वैप करने से, बस, स्पष्ट होना इस ढेर फ्रेम प्राप्त क्या है? 483 00:20:47,150 --> 00:20:48,700 484 00:20:48,700 --> 00:20:49,200 हाँ? 485 00:20:49,200 --> 00:20:50,180 >> दर्शक: [अश्राव्य]. 486 00:20:50,180 --> 00:20:51,180 डेविड जे Malan: बिल्कुल. 487 00:20:51,180 --> 00:20:53,129 एक्स के पते और y का पता. 488 00:20:53,129 --> 00:20:55,170 और आप इन के बारे में सोच सकते हैं डाक के पते की तरह. 489 00:20:55,170 --> 00:20:58,772 33 ऑक्सफोर्ड स्ट्रीट और 35 ऑक्सफोर्ड स्ट्रीट, और आप 490 00:20:58,772 --> 00:21:01,230 दो इमारतों को स्थानांतरित करना चाहते हैं उन स्थानों पर हैं. 491 00:21:01,230 --> 00:21:04,680 >> यह एक हास्यास्पद विचार की तरह है, लेकिन यह है कि हम पता मतलब सब है. 492 00:21:04,680 --> 00:21:07,000 जहाँ दुनिया में कर सकते हैं आप उन दो ints पाते हैं? 493 00:21:07,000 --> 00:21:09,470 जहाँ दुनिया में आप कर सकते हैं उन दो इमारतों पाते हैं? 494 00:21:09,470 --> 00:21:15,170 तो आखिर अगर, यह सब समय के बाद मैं आज के स्रोत कोड में जाओ और संकलन 495 00:21:15,170 --> 00:21:22,110 स्वैप और रन ./swap, अंत में, के लिए पहली बार हम वास्तव में देख रहे है 496 00:21:22,110 --> 00:21:25,330 अपने मूल्यों वास्तव में है सफलतापूर्वक बदली गई. 497 00:21:25,330 --> 00:21:30,860 और अब, हम भी ले जा सकते हैं इस में, कहते हैं, GDB का नोट. 498 00:21:30,860 --> 00:21:32,740 >> तो मुझे एक ही फाइल में चलते हैं. 499 00:21:32,740 --> 00:21:35,010 मुझे आगे जाना है और ./swap की GDB चलाते हैं. 500 00:21:35,010 --> 00:21:36,590 501 00:21:36,590 --> 00:21:40,547 और अब, स्वैप, मैं जा रहा हूँ आगे और मुख्य में एक ब्रेक अंक निर्धारित किया है. 502 00:21:40,547 --> 00:21:42,630 और अब मैं जा रहा हूँ आगे और कार्यक्रम चलाते हैं. 503 00:21:42,630 --> 00:21:45,810 और अब हम अपने कोड देख उस लाइन पर रोक दिया है. 504 00:21:45,810 --> 00:21:48,330 >> मैं आगे और प्रिंट जाओ एक्स, मैं यहाँ क्या देखना चाहिए? 505 00:21:48,330 --> 00:21:49,314 506 00:21:49,314 --> 00:21:49,980 यह एक सवाल है. 507 00:21:49,980 --> 00:21:51,030 508 00:21:51,030 --> 00:21:51,530 फिर से कहो? 509 00:21:51,530 --> 00:21:52,295 >> दर्शक: [अश्राव्य]. 510 00:21:52,295 --> 00:21:53,910 >> डेविड जे Malan: तो यादृच्छिक संख्या, शायद. 511 00:21:53,910 --> 00:21:56,010 शायद मैं भाग्यशाली हो, और यह बात है 0 की तरह, अच्छा और सरल. 512 00:21:56,010 --> 00:21:57,230 लेकिन शायद यह कुछ यादृच्छिक संख्या है. 513 00:21:57,230 --> 00:21:58,090 इस मामले में, मैं भाग्यशाली है. 514 00:21:58,090 --> 00:21:59,030 यह सिर्फ 0 होना होता है. 515 00:21:59,030 --> 00:22:00,780 लेकिन यह वास्तव में भाग्य है नहीं जब तक क्योंकि मैं 516 00:22:00,780 --> 00:22:06,280 अगले प्रकार और फिर प्रिंट एक्स कि है कोड की रेखा, रेखा 19, मार डाला गया. 517 00:22:06,280 --> 00:22:10,942 >> इस बीच, मैं प्रकार अगर अगले फिर से, और अब मैं 2 को देखने के लिए जा रहा हूँ, वाई बाहर प्रिंट. 518 00:22:10,942 --> 00:22:13,900 मैं अगले प्रकार अब, अगर, यह जा रहा है एक छोटे से भ्रमित हो, क्योंकि अब, 519 00:22:13,900 --> 00:22:17,250 printf पर दिखाई जा रही है स्क्रीन यह किया है, के रूप में. एक्स 1 है. 520 00:22:17,250 --> 00:22:18,606 >> चलो फिर से यह करते हैं. 521 00:22:18,606 --> 00:22:20,480 और अब, यहाँ कहाँ है बातें दिलचस्प मिल. 522 00:22:20,480 --> 00:22:21,580 523 00:22:21,580 --> 00:22:26,580 मैं स्वैप या भी कदम फोन से पहले इसे में, चलो थोड़ा तिरछी नज़र रखना. 524 00:22:26,580 --> 00:22:28,980 एक्स, फिर, 1 है. 525 00:22:28,980 --> 00:22:33,240 वाई, बेशक, त्वरित विवेक है इतना मुश्किल नहीं है वहाँ,, 2 की जाँच करें. 526 00:22:33,240 --> 00:22:35,740 लेकिन एम्परसेंड एक्स क्या है? 527 00:22:35,740 --> 00:22:36,760 528 00:22:36,760 --> 00:22:39,350 जवाब दो, यह एक तरह से कायरता लग रही है. 529 00:22:39,350 --> 00:22:43,500 लेकिन कोष्ठकों में पूर्णांक स्टार बस है यह कह के सकल घरेलू उत्पाद की तरह एक पता है. 530 00:22:43,500 --> 00:22:48,290 यह एक के लिए एक सूचक एक पूर्णांक नहीं है पूर्णांक, या अन्यथा एक पते के रूप में जाना जाता है. 531 00:22:48,290 --> 00:22:49,742 >> इस पागल बात क्या है? 532 00:22:49,742 --> 00:22:51,825 हम कुछ कभी नहीं देखा काफी पहले की तरह. 533 00:22:51,825 --> 00:22:53,650 534 00:22:53,650 --> 00:22:58,120 तो यह मेरे कंप्यूटर में पता है एक्स जीना होता है जहां की स्मृति. 535 00:22:58,120 --> 00:22:59,040 यह बैल कुछ है. 536 00:22:59,040 --> 00:23:01,290 और यह सच में, क्यों, है मैं तीर ड्राइंग शुरू कर दिया है, 537 00:23:01,290 --> 00:23:03,340 बजाय संख्या की, जो वास्तव में परवाह है क्योंकि 538 00:23:03,340 --> 00:23:06,890 अपने पूर्णांक एक विशेष पर है कि बड़ा है कि उस पते. 539 00:23:06,890 --> 00:23:12,160 लेकिन bffff0c4, इन सभी कर रहे हैं वास्तव में हेक्साडेसिमल अंक, 540 00:23:12,160 --> 00:23:13,720 एफ के माध्यम से 0 कर रहे हैं. 541 00:23:13,720 --> 00:23:16,590 >> तो हम भी ध्यान केन्द्रित करने के लिए नहीं जा रहे हैं उन चीजों में क्या कर रहे हैं पर लंबा. 542 00:23:16,590 --> 00:23:19,400 लेकिन मैं y बाहर प्रिंट, बेशक, मैं 2 देखें. 543 00:23:19,400 --> 00:23:22,440 लेकिन एम्परसेंड वाई, मैं इस पते देखते हैं. 544 00:23:22,440 --> 00:23:26,527 और नोटिस, जिज्ञासु के लिए, अलग एक्स और वाई कितनी दूर हैं? 545 00:23:26,527 --> 00:23:27,985 आप पते के सबसे अनदेखा कर सकते हैं. 546 00:23:27,985 --> 00:23:29,330 547 00:23:29,330 --> 00:23:29,920 चार बाइट्स. 548 00:23:29,920 --> 00:23:33,510 और उस के साथ संगत है हमारी पहले एक पूर्णांक कितना बड़ा दावा है कि? 549 00:23:33,510 --> 00:23:34,130 चार बाइट्स. 550 00:23:34,130 --> 00:23:37,420 तो यह सब कुछ के अस्तर ऊपर की तरह लग रहा है अच्छी तरह से, आप स्मृति में, उम्मीद है कि हो सकता है के रूप में. 551 00:23:37,420 --> 00:23:40,010 >> तो अब, बस तेजी से आगे चलो इस कहानी का अंत करने के लिए. 552 00:23:40,010 --> 00:23:43,290 , चलो आगे बढ़ो और कदम टाइप करते स्वैप समारोह में डुबकी. 553 00:23:43,290 --> 00:23:46,880 अब मैं एक प्रकार है, यह है, नोटिस एक्स के पते के समान. 554 00:23:46,880 --> 00:23:52,130 मैं बी टाइप करते हैं, तो यह समान है वाई का पता करने के लिए. 555 00:23:52,130 --> 00:23:57,020 इसलिए मुझे लगता है मैं तो क्या देखना चाहिए , एक पते पर जाने कहते हो? 556 00:23:57,020 --> 00:23:58,120 तो एक स्टार प्रिंट. 557 00:23:58,120 --> 00:24:00,130 तो सितारा इस संदर्भ में, वहाँ जाने का मतलब है. 558 00:24:00,130 --> 00:24:02,730 एम्परसेंड का पता है क्या मतलब है. 559 00:24:02,730 --> 00:24:05,000 तो एक साधन के 1 स्टार. 560 00:24:05,000 --> 00:24:09,590 और प्रिंट सितारा ख मुझे 2 देता है. 561 00:24:09,590 --> 00:24:15,750 >> और मुझे पल के लिए, मान लेते हैं, कम से कम कोड कि कि 562 00:24:15,750 --> 00:24:18,950 हो सकता है अब अमल आय उस रास्ते में के माध्यम से समझाया. 563 00:24:18,950 --> 00:24:21,150 लेकिन हम लंबे समय से पहले इस विचार को फिर से आना करेंगे. 564 00:24:21,150 --> 00:24:23,850 स्वैप की तो यह संस्करण अब सही है और अनुमति देता है 565 00:24:23,850 --> 00:24:26,650 हमें इस विशेष डेटा प्रकार स्वैप करने के लिए. 566 00:24:26,650 --> 00:24:29,120 >> तो कोई प्रश्न तो स्वैप पर? 567 00:24:29,120 --> 00:24:29,890 स्टार पर? 568 00:24:29,890 --> 00:24:30,690 के पते पर? 569 00:24:30,690 --> 00:24:33,270 और तुम्हारे साथ, देखेंगे समस्या है, की तरह, 4 सेट 570 00:24:33,270 --> 00:24:37,310 लेकिन समस्या यह है कि 5, निश्चित रूप से, कैसे इन सेट बातें उपयोगी होते हैं और मिल भी बहुत कुछ 571 00:24:37,310 --> 00:24:39,584 नतीजतन, उनके साथ सहज. 572 00:24:39,584 --> 00:24:40,430 सभी में कुछ भी? 573 00:24:40,430 --> 00:24:40,930 ठीक है. 574 00:24:40,930 --> 00:24:44,350 तो malloc, इस समारोह में फिर से है, कि सिर्फ स्मृति, स्मृति का आवंटन 575 00:24:44,350 --> 00:24:45,330 आवंटन. 576 00:24:45,330 --> 00:24:47,024 और क्यों यह उपयोगी है? 577 00:24:47,024 --> 00:24:48,940 खैर, यह सब समय, आप malloc का उपयोग किया गया है. 578 00:24:48,940 --> 00:24:52,230 तुम अब विचार कैसे हैं निर्माण getString, शायद, यह है 579 00:24:52,230 --> 00:24:56,140 का एक हिस्सा के लिए किसी से पूछ गया स्मृति, कभी भी उपयोगकर्ता प्रकार एक स्ट्रिंग 580 00:24:56,140 --> 00:24:59,040 में, निश्चित रूप से हम क्योंकि पता नहीं था, CS50 स्टाफ के रूप में, 581 00:24:59,040 --> 00:25:02,710 कितना बड़ा उन तार कि मनुष्य हो सकता है टाइप करने के लिए जा रहे हैं. 582 00:25:02,710 --> 00:25:07,910 >> तो चलो, पहले समय के लिए, के लिए शुरू करते हैं छील वापस कैसे CS50 पुस्तकालय निर्माण, 583 00:25:07,910 --> 00:25:10,990 उदाहरण के एक जोड़े के माध्यम से कि हमें वहाँ का नेतृत्व करेंगे. 584 00:25:10,990 --> 00:25:15,300 मैं एडिट खोल तो अगर और, scanf 0 खोलो 585 00:25:15,300 --> 00:25:17,055 हम निम्नलिखित कोड को देखने के लिए जा रहे हैं. 586 00:25:17,055 --> 00:25:18,720 587 00:25:18,720 --> 00:25:23,530 के लिए वेबसाइट पर उपलब्ध scanf 0, आज, कोड की अपेक्षाकृत कुछ लाइनें है 588 00:25:23,530 --> 00:25:25,351 यहाँ, 20 के माध्यम से 14. 589 00:25:25,351 --> 00:25:26,600 और चलो यह क्या कर रहा है देखते हैं. 590 00:25:26,600 --> 00:25:28,920 यह एक पूर्णांक कहा जाता है, एक्स वाणी है. 591 00:25:28,920 --> 00:25:30,850 यह कुछ ऐसा, संख्या कृपया कहते हैं. 592 00:25:30,850 --> 00:25:33,940 और अब यह scanf% मैं, और एक्स, कहते हैं. 593 00:25:33,940 --> 00:25:35,620 तो वहाँ नया सामान का एक गुच्छा है. 594 00:25:35,620 --> 00:25:38,420 >> लेकिन scanf, आप की तरह सोच सकते हैं के printf के विपरीत है. 595 00:25:38,420 --> 00:25:40,090 printf, बेशक, स्क्रीन करने के लिए प्रिंट. 596 00:25:40,090 --> 00:25:44,410 उपयोगकर्ता से स्कैन की scanf क्रमबद्ध कुंजीपटल कुछ वह या वह टाइप किया गया है. 597 00:25:44,410 --> 00:25:46,550 >> % मैं सिर्फ printf की तरह है. 598 00:25:46,550 --> 00:25:49,410 इस उम्मीद का मतलब उपयोगकर्ता एक पूर्णांक टाइप करने के लिए. 599 00:25:49,410 --> 00:25:52,820 और अब, तुम क्यों मुझे लगता है scanf और एक्स पारित हो सकता है? 600 00:25:52,820 --> 00:25:54,030 601 00:25:54,030 --> 00:25:57,770 यदि scanf के जीवन में उद्देश्य उपयोगकर्ता से कुछ मिल रहा है, 602 00:25:57,770 --> 00:26:02,480 का अर्थ क्या है अब, यह गुजर रहा है, और एक्स? 603 00:26:02,480 --> 00:26:02,980 हाँ? 604 00:26:02,980 --> 00:26:03,896 >> दर्शक: [अश्राव्य]. 605 00:26:03,896 --> 00:26:05,540 606 00:26:05,540 --> 00:26:06,540 डेविड जे Malan: बिल्कुल. 607 00:26:06,540 --> 00:26:12,900 मैं जो भी, मानव,, मेरे इनपुट में टाइप करें उस स्थान पर बचाया जा रहा है. 608 00:26:12,900 --> 00:26:17,660 यह सिर्फ करने के लिए, याद करते हैं, पर्याप्त नहीं है हम पहले से ही देखा है, क्योंकि एक्स में पारित, 609 00:26:17,660 --> 00:26:21,630 किसी भी समय आप सिर्फ एक कच्चा चर पारित एक पूर्णांक की तरह, कुछ अन्य कार्य करने के लिए, 610 00:26:21,630 --> 00:26:25,640 बेशक, यह है कि बदल सकते हैं चर, लेकिन स्थायी रूप से नहीं. 611 00:26:25,640 --> 00:26:27,360 यह मुख्य पर असर नहीं कर सकते हैं. 612 00:26:27,360 --> 00:26:29,420 यह केवल अपनी ही स्थानीय प्रतिलिपि को बदल सकते हैं. 613 00:26:29,420 --> 00:26:32,560 लेकिन अगर इसके बजाय, आप नहीं करते मुझे वास्तविक पूर्णांक दे, 614 00:26:32,560 --> 00:26:36,640 लेकिन आप मुझे निर्देश के लिए दे कि पूर्णांक, मैं अब,, scanf जा रहा है 615 00:26:36,640 --> 00:26:41,050 निश्चित रूप से, मुझे लगता है कि पालन कर सकते हैं पता और वहाँ एक नंबर डाल 616 00:26:41,050 --> 00:26:43,280 तो आप के रूप में अच्छी तरह से इसे करने के लिए उपयोग किया है. 617 00:26:43,280 --> 00:26:45,120 >> मैं इस कार्यक्रम चलाते समय तो, चलो देखते हैं. 618 00:26:45,120 --> 00:26:49,660 Scanf 0 डॉट स्लेश बनाओ, 0 scanf. 619 00:26:49,660 --> 00:26:54,030 और मैं अब एक नंबर टाइप 50 की तरह, 50 के लिए धन्यवाद. 620 00:26:54,030 --> 00:26:58,150 मैं अब की तरह एक नंबर टाइप करें नकारात्मक 1 के लिए, 1 नकारात्मक. 621 00:26:58,150 --> 00:27:04,200 मैं अब एचएम, 1.5 की तरह एक नंबर लिखें. 622 00:27:04,200 --> 00:27:06,030 क्यों मेरे प्रोग्राम मुझे अनदेखा किया? 623 00:27:06,030 --> 00:27:07,300 624 00:27:07,300 --> 00:27:09,880 खैर, क्योंकि बस, मुझे बताया गया यह एक पूर्णांक ही उम्मीद है. 625 00:27:09,880 --> 00:27:10,380 ठीक है. 626 00:27:10,380 --> 00:27:11,630 तो यह है कि इस का एक संस्करण है. 627 00:27:11,630 --> 00:27:16,600 चलो एक पायदान ऊपर बातें लेते हैं और यह अच्छा नहीं है कि प्रस्ताव. 628 00:27:16,600 --> 00:27:20,530 और इस के साथ साथ एक बहुत ही सरल उदाहरण झूठ हम कोड लिखने शुरू कर सकते हैं कि कैसे 629 00:27:20,530 --> 00:27:24,450 अन्य लोगों का दोहन कर सकते हैं कि या बुरी बातें करके समझौता. 630 00:27:24,450 --> 00:27:28,336 तो लाइन 16, तो इसी तरह आत्मा में से पहले तक, 631 00:27:28,336 --> 00:27:29,960 लेकिन मैं इसे इस समय int की घोषणा नहीं कर रहा हूँ. 632 00:27:29,960 --> 00:27:32,970 मैं स्ट्रिंग उर्फ, यह चार सितारा घोषणा कर रहा हूँ. 633 00:27:32,970 --> 00:27:35,190 >> लेकिन यह है कि वास्तव में क्या मतलब है? 634 00:27:35,190 --> 00:27:38,790 तो मैं एक address-- निर्दिष्ट नहीं है और मैं मनमाने ढंग से यह कह रहा हूँ, बफर, 635 00:27:38,790 --> 00:27:43,370 लेकिन मैं simple-- होने के लिए, यह बात कह सकते हैं और फिर मैं ऐसा करने के लिए मुझे समझाने की, 636 00:27:43,370 --> 00:27:48,630 आप पिछले पर आधारित सकता है, अगर तर्क, scanf लाइन 18 में क्या कर रहा है, 637 00:27:48,630 --> 00:27:55,000 पास% है और बफर हैं, एक पते जो है? 638 00:27:55,000 --> 00:27:58,210 आप लागू अगर scanf, क्या है संस्करण 0 के रूप में सटीक एक ही तर्क, 639 00:27:58,210 --> 00:28:00,640 यहाँ क्या करने की कोशिश की जा रही है, जब में उपयोगकर्ता प्रकार कुछ और? 640 00:28:00,640 --> 00:28:02,630 641 00:28:02,630 --> 00:28:03,409 हाँ? 642 00:28:03,409 --> 00:28:04,407 >> दर्शक: [अश्राव्य]. 643 00:28:04,407 --> 00:28:07,401 644 00:28:07,401 --> 00:28:08,890 >> डेविड जे Malan: बिल्कुल. 645 00:28:08,890 --> 00:28:11,577 Scanf, तर्क पहले से, स्ट्रिंग ले जा रहा है 646 00:28:11,577 --> 00:28:13,410 मानव द्वारा लिखे गए , यह अब एक स्ट्रिंग है in-- 647 00:28:13,410 --> 00:28:15,790 यह, शायद, एक नंबर नहीं है वह या वह cooperates-- अगर 648 00:28:15,790 --> 00:28:19,310 और यह कि डाल करने के लिए प्रयास करने के लिए जा रहा है जो भी पते पर स्मृति में स्ट्रिंग 649 00:28:19,310 --> 00:28:20,340 बफर निर्दिष्ट करता है. 650 00:28:20,340 --> 00:28:23,870 और यह महान है, बफर क्योंकि वास्तव में एक पते के लिए होती है. 651 00:28:23,870 --> 00:28:30,470 >> लेकिन मैं इस कार्यक्रम में एक छोटी गाड़ी है दावा बहुत गंभीर रास्ता, मूल्य क्या है क्योंकि 652 00:28:30,470 --> 00:28:31,330 डिफ़ॉल्ट रूप से बफर? 653 00:28:31,330 --> 00:28:33,380 654 00:28:33,380 --> 00:28:34,790 मैं क्या में initialized है? 655 00:28:34,790 --> 00:28:35,770 स्मृति का क्या हिस्सा? 656 00:28:35,770 --> 00:28:37,480 657 00:28:37,480 --> 00:28:38,620 मैं नहीं है, है ना? 658 00:28:38,620 --> 00:28:42,265 >> इसलिए मैं आवंटित करने के बावजूद एक अब नहीं है कहा जाता है कि चार सितारा, 659 00:28:42,265 --> 00:28:48,030 यह बजाय कहा जाता है, तो buffer-- चर का नाम खींचना 660 00:28:48,030 --> 00:28:53,380 मैं नहीं है अगर अब के रूप में buffer-- यहाँ getString या malloc कहा जाता है, 661 00:28:53,380 --> 00:28:56,030 कि प्रभावी रूप से इसका मतलब है कि बफर सिर्फ कुछ कचरा मूल्य है. 662 00:28:56,030 --> 00:28:57,030 >> अब इसका क्या मतलब है? 663 00:28:57,030 --> 00:29:00,220 यह मैं scanf बताया है कि इसका मतलब है उपयोगकर्ता से एक स्ट्रिंग की उम्मीद है. 664 00:29:00,220 --> 00:29:01,300 और तुम जानते हो क्या? 665 00:29:01,300 --> 00:29:03,883 जो भी इस बात की ओर इशारा करते है to-- और मैं सवालिया निशान आकर्षित, 666 00:29:03,883 --> 00:29:07,060 लेकिन वास्तविकता में, यह होने जा रहा है OX1, 2, 3, की तरह कुछ ठीक है? 667 00:29:07,060 --> 00:29:10,730 यह कुछ फर्जी मूल्य है कि बस पहले से वहाँ होना होता है. 668 00:29:10,730 --> 00:29:13,440 तो दूसरे शब्दों में कहें, यह है बफर बस है मानो 669 00:29:13,440 --> 00:29:16,180 स्मृति में कुछ की ओर इशारा करते. 670 00:29:16,180 --> 00:29:17,610 मैं क्या है पता नहीं है. 671 00:29:17,610 --> 00:29:24,130 >> मैं अब Gabe में टाइप करें तो, अगर यह हो रहा है वहाँ G-a-B-ए / 0 डाल करने के लिए प्रयास करने के लिए. 672 00:29:24,130 --> 00:29:25,530 लेकिन जो है कि वह क्या जानता है? 673 00:29:25,530 --> 00:29:27,480 और अतीत में, किसी भी हम संपर्क करने की कोशिश की है समय 674 00:29:27,480 --> 00:29:29,770 संबंधित नहीं है कि स्मृति हमारे लिए, क्या हुआ है? 675 00:29:29,770 --> 00:29:31,020 676 00:29:31,020 --> 00:29:32,870 या लगभग हर समय. 677 00:29:32,870 --> 00:29:34,310 विभाजन गलती, सही? 678 00:29:34,310 --> 00:29:37,829 >> यह है जहाँ यह तीर, मुझे पता नहीं है ओर इशारा करते हुए. यह सिर्फ कुछ यादृच्छिक मूल्य है. 679 00:29:37,829 --> 00:29:40,370 और हां, आप व्याख्या अगर एक पते के रूप में एक यादृच्छिक मूल्य, 680 00:29:40,370 --> 00:29:42,610 आप के लिए जा रहे हैं कुछ बेतरतीब गंतव्य. 681 00:29:42,610 --> 00:29:46,810 तो Gabe दुर्घटना वास्तव में हो सकता है यहाँ इस मामले में मेरे कार्यक्रम. 682 00:29:46,810 --> 00:29:50,600 >> इसलिए हम चाहते हैं कि लगभग रूप में बुरा क्या कर सकते हैं? 683 00:29:50,600 --> 00:29:52,660 इस तीसरे पर विचार करें और scanf का अंतिम उदाहरण. 684 00:29:52,660 --> 00:29:53,890 685 00:29:53,890 --> 00:29:56,870 इस संस्करण में क्या मायने में बेहतर है? 686 00:29:56,870 --> 00:29:57,990 687 00:29:57,990 --> 00:30:01,400 आप के साथ आराम कर रहे हैं पिछले समस्या, यह बेहतर है. 688 00:30:01,400 --> 00:30:02,250 क्यों? 689 00:30:02,250 --> 00:30:03,250 >> दर्शक: [अश्राव्य]. 690 00:30:03,250 --> 00:30:06,235 691 00:30:06,235 --> 00:30:07,110 डेविड जे Malan: अच्छा. 692 00:30:07,110 --> 00:30:09,970 लाइन 16 का तो इस मामले इस अर्थ में, बेहतर है 693 00:30:09,970 --> 00:30:12,030 हम स्पष्ट रूप से कर रहे हैं कि कुछ स्मृति का आवंटन. 694 00:30:12,030 --> 00:30:14,190 हम malloc का उपयोग नहीं कर रहे हैं हम सप्ताह 2 का उपयोग कर रहे हैं 695 00:30:14,190 --> 00:30:16,060 सिर्फ एक सरणी की घोषणा की दृष्टिकोण. 696 00:30:16,060 --> 00:30:18,130 और हम हैं कि एक स्ट्रिंग पहले कहा है अक्षर का सिर्फ एक सरणी है, 697 00:30:18,130 --> 00:30:19,690 तो यह पूरी तरह से वैध है. 698 00:30:19,690 --> 00:30:22,910 लेकिन यह रूप में, ज़ाहिर है, है आप 16,, निश्चित आकार ध्यान दें. 699 00:30:22,910 --> 00:30:25,440 >> इसलिए इस कार्यक्रम है पूरी तरह से सुरक्षित, मैं प्रकार यदि 700 00:30:25,440 --> 00:30:29,760 एक चरित्र तार में, दो चरित्र तार, 15 चरित्र तार. 701 00:30:29,760 --> 00:30:34,970 लेकिन जैसे ही मैं 16 टाइप करना आरंभ के रूप में, 17, 18, 1000 चरित्र तार, 702 00:30:34,970 --> 00:30:37,390 जहां कि स्ट्रिंग समाप्त करने के लिए जा रहा है? 703 00:30:37,390 --> 00:30:39,570 यह आंशिक रूप से यहां खत्म हो जा रहा है. 704 00:30:39,570 --> 00:30:42,820 लेकिन तब कौन और क्या सीमाओं से परे है 705 00:30:42,820 --> 00:30:44,270 इस विशेष सरणी की? 706 00:30:44,270 --> 00:30:48,015 >> मैं हालांकि ऐसा लगता है जैसे यहां 16 बक्से की घोषणा की. 707 00:30:48,015 --> 00:30:49,300 708 00:30:49,300 --> 00:30:52,690 इसलिए सभी 16 बाहर आकर्षित करने के बजाय, हम करेंगे अभी मैं 16 खींचा है कि नाटक. 709 00:30:52,690 --> 00:30:56,540 लेकिन मैं तो एक स्ट्रिंग पढ़ने की कोशिश अगर कि 50 पात्रों की तरह, बहुत लंबे समय तक है, 710 00:30:56,540 --> 00:31:01,270 मैं लगाने शुरू करने जा रहा हूँ ए, बी, सी, डी, एक्स, वाई, जेड. 711 00:31:01,270 --> 00:31:04,916 और यह शायद है कुछ अन्य स्मृति खंड 712 00:31:04,916 --> 00:31:06,790 कि, फिर से, कारण हो सकता है मेरे कार्यक्रम, दुर्घटना के लिए 713 00:31:06,790 --> 00:31:10,600 मैं के लिए नहीं कहा गया है, क्योंकि सिर्फ 16 बाइट्स से अधिक कुछ भी. 714 00:31:10,600 --> 00:31:12,260 >> तो कौन परवाह करता है? 715 00:31:12,260 --> 00:31:13,880 वैसे, यहाँ CS50 पुस्तकालय है. 716 00:31:13,880 --> 00:31:17,220 और इस का सबसे बस है ऊपर दिए गए निर्देशों की तरह. 717 00:31:17,220 --> 00:31:21,670 CS50 पुस्तकालय, यह सब समय, लाइन 52 में इस लाइन पड़ा है. 718 00:31:21,670 --> 00:31:23,680 हम typedef देखा, या किया है आप typedef देखेंगे 719 00:31:23,680 --> 00:31:27,930 बस एक बनाता है जो pset 4 में पर्याय चार सितारा और अधिक हो सकता है जिससे 720 00:31:27,930 --> 00:31:29,290 बस स्ट्रिंग के रूप में भेजा. 721 00:31:29,290 --> 00:31:31,540 तो इस में से एक है कुछ प्रशिक्षण पहियों 722 00:31:31,540 --> 00:31:34,120 हम हुड के नीचे चुपके से उपयोग किया है. 723 00:31:34,120 --> 00:31:36,490 >> इस बीच, यहां getchar, समारोह है. 724 00:31:36,490 --> 00:31:38,190 अब जाहिर है, इसका कोई शरीर नहीं है. 725 00:31:38,190 --> 00:31:40,273 और वास्तव में, मैं रखना स्क्रॉल, मैं वास्तव में नहीं करते 726 00:31:40,273 --> 00:31:42,080 किसी भी कार्यान्वयन देखना इन कार्यों की. 727 00:31:42,080 --> 00:31:43,140 728 00:31:43,140 --> 00:31:45,516 एक मानसिक स्वास्थ्य की जांच के रूप में, ऐसा क्यों है? 729 00:31:45,516 --> 00:31:46,795 >> दर्शक: [अश्राव्य]. 730 00:31:46,795 --> 00:31:47,670 डेविड जे Malan: हाँ. 731 00:31:47,670 --> 00:31:48,950 तो इस हेडर फाइल है. 732 00:31:48,950 --> 00:31:52,520 और हेडर फाइल प्रोटोटाइप होते हैं, प्लस कुछ अन्य सामान, ऐसा लगता है, 733 00:31:52,520 --> 00:31:53,780 typedefs की तरह. 734 00:31:53,780 --> 00:31:56,910 लेकिन CS50.c, में हम है जो एकमुश्त आप कभी नहीं दिया, 735 00:31:56,910 --> 00:32:02,100 लेकिन CS50 उपकरण में किया गया है सभी इस समय, गहरी अपने फ़ोल्डरों के अंदर, 736 00:32:02,100 --> 00:32:04,990 एक पूरी है कि वहाँ नोटिस यहाँ के कार्यों में गुच्छा. 737 00:32:04,990 --> 00:32:06,720 >> वास्तव में, के नीचे स्क्रॉल करते हैं. 738 00:32:06,720 --> 00:32:08,810 चलो अभी के लिए, उनमें से ज्यादातर की अनदेखी करते हैं. 739 00:32:08,810 --> 00:32:12,670 लेकिन getInt के लिए नीचे स्क्रॉल और getInt कैसे काम करता है देखना. 740 00:32:12,670 --> 00:32:13,890 तो यहाँ getInt है. 741 00:32:13,890 --> 00:32:17,727 आप कभी वास्तव में परवाह है और कैसे प्राप्त पूर्णांक यहाँ काम करता है, उसके दस्तावेज है. 742 00:32:17,727 --> 00:32:19,560 और बातों के अलावा यह यह आपको बताता है कहते हैं 743 00:32:19,560 --> 00:32:21,340 मूल्यों की सीमाओं इसे वापस कर सकते हैं क्या. 744 00:32:21,340 --> 00:32:24,400 यह अनिवार्य रूप से नकारात्मक है 2 अरब सकारात्मक 2 अरब, दे या ले. 745 00:32:24,400 --> 00:32:26,420 >> और यह सब यह पता चला है समय, हम कभी नहीं करने के बावजूद 746 00:32:26,420 --> 00:32:28,570 आप इसके लिए जांच की थी, कुछ गलत हो जाता है, 747 00:32:28,570 --> 00:32:30,680 यह सब पता चला है कि इस समय, getInt है 748 00:32:30,680 --> 00:32:33,600 एक विशेष लौट गया , अशक्त, स्थिर नहीं 749 00:32:33,600 --> 00:32:36,760 बल्कि जो, int_max बस एक प्रोग्रामर के सम्मेलन. 750 00:32:36,760 --> 00:32:38,846 यह यहां का मतलब है एक विशेष मूल्य है. 751 00:32:38,846 --> 00:32:41,470 बस, इस बात के लिए जाँच करने के लिए सुनिश्चित करें मामले में कुछ गलत हो जाता है. 752 00:32:41,470 --> 00:32:43,261 लेकिन हम इसकी परवाह कभी नहीं किया है तारीख करने के लिए उस के साथ, 753 00:32:43,261 --> 00:32:45,200 फिर, इस वजह से आसान बनाने के लिए होती है. 754 00:32:45,200 --> 00:32:46,950 >> लेकिन यह कैसे getInt लागू किया जाए? 755 00:32:46,950 --> 00:32:48,450 खैर, एक, यह कोई तर्क लेता है. 756 00:32:48,450 --> 00:32:49,390 हम जानते हैं कि. 757 00:32:49,390 --> 00:32:50,820 यह एक पूर्णांक देता है. 758 00:32:50,820 --> 00:32:51,950 हम जानते हैं कि. 759 00:32:51,950 --> 00:32:54,460 तो कैसे यह हुड के नीचे काम करता है? 760 00:32:54,460 --> 00:32:58,290 >> तो जाहिरा तौर पर एक अनंत वहाँ पाश, एक की कम से कम उपस्थिति. 761 00:32:58,290 --> 00:33:00,290 हम getString उपयोग कर रहे हैं नोटिस. 762 00:33:00,290 --> 00:33:04,000 तो यह दिलचस्प है. getInt हमारे अपने समारोह, getString कहता है. 763 00:33:04,000 --> 00:33:05,645 और अब क्यों इस मामले में हो सकता है? 764 00:33:05,645 --> 00:33:07,400 765 00:33:07,400 --> 00:33:09,842 क्यों मैं रक्षात्मक जा रहा हूँ यहां लाइन 165 में? 766 00:33:09,842 --> 00:33:11,390 767 00:33:11,390 --> 00:33:15,639 क्या लाइन में हो सकता है 164, अभी स्पष्ट होना करने के लिए? 768 00:33:15,639 --> 00:33:16,930 यह पहले की तरह ही जवाब है. 769 00:33:16,930 --> 00:33:18,660 770 00:33:18,660 --> 00:33:20,089 सिर्फ स्मृति से बाहर हो सकता. 771 00:33:20,089 --> 00:33:23,130 कुछ getString साथ गलत हो जाता है हम चाहते हैं कि संभाल करने में सक्षम हो गया है. 772 00:33:23,130 --> 00:33:27,070 और कारण है कि मैं शून्य है वापस नहीं करते कि, तकनीकी, अशक्त एक सूचक है. 773 00:33:27,070 --> 00:33:29,120 getInt एक पूर्णांक वापस जाने के लिए है. 774 00:33:29,120 --> 00:33:31,060 इसलिए मैं मनमाने ढंग से किया है अनिवार्य रूप से, का फैसला 775 00:33:31,060 --> 00:33:34,600 2 अरब कि, जा रही है, दे या ले एक विशेष मूल्य होने के लिए कि मैं कभी नहीं कर सकते 776 00:33:34,600 --> 00:33:35,970 वास्तव में उपयोगकर्ता से मिलता है. 777 00:33:35,970 --> 00:33:39,930 यह मैं जा रहा हूँ सिर्फ एक मूल्य है एक त्रुटि कोड का प्रतिनिधित्व करने के लिए बर्बाद करने के लिए. 778 00:33:39,930 --> 00:33:41,540 >> तो अब, एक छोटी चीजें फैंसी मिलता है. 779 00:33:41,540 --> 00:33:44,670 और यह बहुत ही समारोह नहीं है पहले के रूप में, लेकिन यह बहुत समान है. 780 00:33:44,670 --> 00:33:50,120 तो मैं लाइन में, यहाँ घोषित, नोटिस 172, एक पूर्णांक एन और एक चार ग दोनों. 781 00:33:50,120 --> 00:33:53,600 और फिर मैं इस कायरता लाइन का उपयोग यह पता चला है जो sscanf, 782 00:33:53,600 --> 00:33:55,990 कीबोर्ड से एक स्ट्रिंग स्कैन नहीं करता. 783 00:33:55,990 --> 00:33:59,226 यह एक मौजूदा स्ट्रिंग खड़ा है कि उपयोक्ता पहले से टाइप किया गया है. 784 00:33:59,226 --> 00:34:02,100 तो मैं पहले से ही getString कहा जाता है, जो मैं स्मृति में एक स्ट्रिंग है इसका मतलब है. 785 00:34:02,100 --> 00:34:05,020 sscanf क्या आप चाहते है एक पार्स समारोह कहते हैं. 786 00:34:05,020 --> 00:34:07,760 यह मैं स्ट्रिंग पर लग रहा है , चरित्र से, चरित्र में टाइप 787 00:34:07,760 --> 00:34:09,250 और उपयोगी कुछ भी करता है. 788 00:34:09,250 --> 00:34:10,969 स्ट्रिंग लाइन में संग्रहीत किया जाता है. 789 00:34:10,969 --> 00:34:13,560 और मैं केवल द्वारा जा रहा है कि पता ठीक है, ओह, यहाँ और कह बैक अप लेने, 790 00:34:13,560 --> 00:34:15,143 मैं नहीं है इस समय, लेकिन रेखा कहा जाता है. 791 00:34:15,143 --> 00:34:15,989 792 00:34:15,989 --> 00:34:18,080 >> और अब यह थोड़ा अलग है. 793 00:34:18,080 --> 00:34:22,480 लेकिन यह प्रभावी कारणों से, इसका मतलब है हम कुछ हद तक, आज हमारे हाथ की लहर करेंगे 794 00:34:22,480 --> 00:34:26,070 हम करने के लिए जाँच कर रहे हैं कि उपयोगकर्ता में टाइप अगर देखना 795 00:34:26,070 --> 00:34:29,909 और int और शायद एक और चरित्र. 796 00:34:29,909 --> 00:34:33,610 उपयोगकर्ता एक पूर्णांक में टाइप करते हैं, तो यह बात है मैं कर रहा हूँ क्योंकि जा रहा, एन में जमा करने के लिए 797 00:34:33,610 --> 00:34:36,739 पते से यह गुजर रहा है, हम आज देखा है नई चाल. 798 00:34:36,739 --> 00:34:41,570 उपयोगकर्ता भी टाइप जैसे 123x में, कि एक्स 799 00:34:41,570 --> 00:34:45,060 एक को समाप्त करने के लिए जा रहा है चरित्र ग में पत्र. 800 00:34:45,060 --> 00:34:48,739 >> अब यह है कि sscanf पता चला है समझदारी से, मुझे बता देगा, 801 00:34:48,739 --> 00:34:54,750 कितने चर sscanf था भरने के लिए सफलतापूर्वक सक्षम. 802 00:34:54,750 --> 00:34:58,770 इस तर्क से, तो अगर समारोह मैं, getInt है लागू कर रहा हूँ 803 00:34:58,770 --> 00:35:00,900 लेकिन मैं देख रहा हूँ, संभवतः, उपयोगकर्ता के लिए 804 00:35:00,900 --> 00:35:04,190 एक पूर्णांक में टाइप किया है करने के लिए कुछ और के द्वारा पीछा किया, 805 00:35:04,190 --> 00:35:08,580 क्या मैं sscanf के लिए करना चाहते हैं मान वास्तव में हो सकता है? 806 00:35:08,580 --> 00:35:10,950 उद्देश्य को पाने के लिए है बस उपयोगकर्ता से एक पूर्णांक? 807 00:35:10,950 --> 00:35:13,980 808 00:35:13,980 --> 00:35:19,300 >> तो sscanf देता है 2, इसका क्या मतलब है? 809 00:35:19,300 --> 00:35:21,660 उपयोगकर्ता में टाइप कुछ ऐसा है, सचमुच, 810 00:35:21,660 --> 00:35:24,770 सिर्फ बकवास है जो 123x,. 811 00:35:24,770 --> 00:35:27,490 यह एक त्रुटि हालत है, और मैं उस के लिए जाँच करना चाहते हैं. 812 00:35:27,490 --> 00:35:32,960 >> तो इस में उपयोगकर्ता प्रकार के हैं, के द्वारा इस तर्क, लौटने sscanf क्या करता है, 813 00:35:32,960 --> 00:35:33,740 आप कहेंगे? 814 00:35:33,740 --> 00:35:35,070 815 00:35:35,070 --> 00:35:39,130 तो यह है, क्योंकि 2 वापस करने के लिए जा रहा है 123, यहाँ में जाना जा रहा है 816 00:35:39,130 --> 00:35:41,580 और एक्स यहाँ में खत्म हो जा रहा है. 817 00:35:41,580 --> 00:35:43,970 लेकिन मैं एक्स भर पाने के लिए नहीं करना चाहती. 818 00:35:43,970 --> 00:35:48,580 मैं केवल में सफल होने के लिए sscanf करना चाहते हैं इसके चर के पहले भरने. 819 00:35:48,580 --> 00:35:52,490 और ऐसा इसलिए मैं sscanf 1 लौटना चाहते हैं. 820 00:35:52,490 --> 00:35:55,750 >> और यह सिर पर एक सा है पल के लिए, कि पूरी तरह से ठीक है. 821 00:35:55,750 --> 00:36:00,030 , हालांकि उस एक एहसास getInt और getString के मूल्यों 822 00:36:00,030 --> 00:36:03,630 हम एक की एक बिल्ली कर रहे हैं इस तरह तो जाँच त्रुटि की बहुत 823 00:36:03,630 --> 00:36:07,130 कि, आज तक, तुम बहुत ज्यादा कर सकते हैं अपने कीबोर्ड पर कुछ भी टाइप करें, 824 00:36:07,130 --> 00:36:08,490 और हम इसे पकड़ना होगा. 825 00:36:08,490 --> 00:36:10,592 और हम निश्चित रूप से, स्टाफ, नहीं निश्चित रूप से होगा 826 00:36:10,592 --> 00:36:13,300 में एक बग का स्रोत हो आपके कार्यक्रम, हम बचाव कर रहे हैं क्योंकि 827 00:36:13,300 --> 00:36:16,270 बेवकूफ सभी के लिए जाँच एक उपयोगकर्ता कर सकता है कि चीजें, 828 00:36:16,270 --> 00:36:18,900 , जब एक स्ट्रिंग टाइपिंग की तरह आप वास्तव में पूर्णांक चाहता था. 829 00:36:18,900 --> 00:36:21,350 इसलिए हम आऊँगा now-- के लिए वापस करने के लिए इस long-- पहले 830 00:36:21,350 --> 00:36:23,710 लेकिन यह सब समय, getString और getInt है 831 00:36:23,710 --> 00:36:29,950 इस का उपयोग कर हुड के नीचे किया गया स्मृति के पते का मूल विचार. 832 00:36:29,950 --> 00:36:32,580 >> तो अब, एक की बातें करते हैं उपयोगकर्ता के अनुकूल छोटे से अधिक. 833 00:36:32,580 --> 00:36:38,740 आप Binky पिछले से, याद कर सकते हैं time-- अपने माउस तो cooperate-- होगा अगर 834 00:36:38,740 --> 00:36:42,560 हम इस कोड था जो सच कहूँ तो, काफी अतर्कसंगत है. 835 00:36:42,560 --> 00:36:45,330 इस कोड को कुछ नहीं प्राप्त होता है उपयोगी, लेकिन यह उदाहरण था 836 00:36:45,330 --> 00:36:48,330 कि प्रोफेसर Parlante प्रतिनिधित्व करने के लिए इस्तेमाल किया 837 00:36:48,330 --> 00:36:51,840 क्या एक में जा रहा था स्मृति से जुड़े कार्यक्रम. 838 00:36:51,840 --> 00:36:54,850 >> तो चलो इस निकल जाने कहानी सुपर संक्षेप. 839 00:36:54,850 --> 00:36:58,720 ये पहली दो पंक्तियों में अंग्रेजी, आप क्या कहेंगे करते हैं? 840 00:36:58,720 --> 00:37:01,230 841 00:37:01,230 --> 00:37:05,430 बस में यथोचित मानव, लेकिन थोड़ा तकनीकी शब्दों, एक चाकू ले. 842 00:37:05,430 --> 00:37:06,346 दर्शक: [अश्राव्य]. 843 00:37:06,346 --> 00:37:07,705 844 00:37:07,705 --> 00:37:11,080 >> डेविड जे Malan: ठीक है, आप की स्थापना कर रहे हैं अपने एक्स और वाई चर के लिए पतों. 845 00:37:11,080 --> 00:37:15,520 काफी नहीं है, एक्स और वाई नहीं कर रहे हैं क्योंकि पारंपरिक अर्थों में चर. 846 00:37:15,520 --> 00:37:18,054 एक्स और वाई पते हैं या पते की दुकान है. 847 00:37:18,054 --> 00:37:19,220 तो चलो इस बार और अधिक कोशिश करते हैं. 848 00:37:19,220 --> 00:37:21,010 नहीं एक बुरा शुरू, यद्यपि. 849 00:37:21,010 --> 00:37:21,510 हाँ? 850 00:37:21,510 --> 00:37:22,426 >> दर्शक: [अश्राव्य]. 851 00:37:22,426 --> 00:37:23,966 852 00:37:23,966 --> 00:37:24,840 डेविड जे Malan: अच्छा. 853 00:37:24,840 --> 00:37:26,173 मुझे लगता है कि एक छोटे से क्लीनर है. 854 00:37:26,173 --> 00:37:28,630 दो संकेत, दो पूर्णांकों की घोषणा. 855 00:37:28,630 --> 00:37:30,150 और हम उन्हें एक्स और वाई बुला रहे हैं. 856 00:37:30,150 --> 00:37:32,790 या हम थे आकर्षित करने के लिए इस एक तस्वीर के रूप में, फिर से, 857 00:37:32,790 --> 00:37:36,410 काफी बस कि सभी को याद हम चाहते हैं कि पहली पंक्ति के साथ कर रहे हैं 858 00:37:36,410 --> 00:37:39,690 इस तरह से एक बॉक्स आ रहा है, इसमें कुछ कचरा मूल्य के साथ, 859 00:37:39,690 --> 00:37:41,920 और फिर यह एक्स बुला, और इस तरह एक और बॉक्स, 860 00:37:41,920 --> 00:37:43,880 कुछ कचरा मूल्य के साथ इसे में, वाई बुला. 861 00:37:43,880 --> 00:37:45,810 हम दो घोषित किया है संकेत है कि अंततः 862 00:37:45,810 --> 00:37:47,860 एक पूर्णांक के पते की दुकान है. 863 00:37:47,860 --> 00:37:49,170 तो यह है कि सब कुछ है. 864 00:37:49,170 --> 00:37:53,290 >> Binky ऐसा किया तो जब, मिट्टी सिर्फ इस तरह से देखा. 865 00:37:53,290 --> 00:37:55,350 और निक बस की तरह तीर लिपटे, 866 00:37:55,350 --> 00:37:57,590 के रूप में हालांकि वे कहीं ओर इशारा करते हुए नहीं रहे विशेष रूप से, क्योंकि वे अभी कर रहे हैं 867 00:37:57,590 --> 00:37:58,250 कचरा मूल्यों. 868 00:37:58,250 --> 00:38:01,670 वे स्पष्ट रूप से प्रारंभ नहीं रहे कहीं भी विशेष रूप से. 869 00:38:01,670 --> 00:38:03,980 >> अब अगली पंक्ति कोड, याद करते हैं, यह था. 870 00:38:03,980 --> 00:38:07,510 , यथोचित उपयोगकर्ता के अनुकूल में तो लेकिन कुछ तकनीकी अंग्रेजी, 871 00:38:07,510 --> 00:38:09,790 कोड कर की इस पंक्ति क्या है? 872 00:38:09,790 --> 00:38:10,391 हाँ? 873 00:38:10,391 --> 00:38:11,333 >> दर्शक: [अश्राव्य]. 874 00:38:11,333 --> 00:38:12,746 875 00:38:12,746 --> 00:38:13,950 >> डेविड जे Malan: बिल्कुल सही. 876 00:38:13,950 --> 00:38:17,016 यह का हिस्सा आवंटन है एक पूर्णांक के आकार है कि स्मृति. 877 00:38:17,016 --> 00:38:18,140 और वह आधा जवाब है. 878 00:38:18,140 --> 00:38:20,056 आप सही जवाब दिए अभिव्यक्ति की आधी. 879 00:38:20,056 --> 00:38:22,473 पर क्या हो रहा है बराबर चिह्न के बाएं हाथ की ओर? 880 00:38:22,473 --> 00:38:22,972 हाँ? 881 00:38:22,972 --> 00:38:24,814 दर्शक: और प्रदान यह चर एक्स के लिए? 882 00:38:24,814 --> 00:38:27,690 >> डेविड जे Malan: और प्रदान यह चर एक्स के लिए. 883 00:38:27,690 --> 00:38:31,650 संक्षिप्त, दाएँ हाथ की ओर आवंटित करने के लिए तो पर्याप्त स्मृति एक पूर्णांक स्टोर करने के लिए. 884 00:38:31,650 --> 00:38:34,150 लेकिन malloc विशेष रूप से पता देता है 885 00:38:34,150 --> 00:38:37,270 आपने जो स्मृति की है कि हिस्सा है, सिर्फ एक्स में जमा हो जाता है प्रस्ताव रखा. 886 00:38:37,270 --> 00:38:42,560 >> तो क्या निक Binky साथ पिछली बार किया था है वह है कि सूचक बाहर घसीटा, मिट्टी, 887 00:38:42,560 --> 00:38:46,820 स्मृति की एक सफेद हिस्सा पर अब बात करने के लिए कि एक पूर्णांक के आकार के बराबर है. 888 00:38:46,820 --> 00:38:49,360 और वास्तव में, कि मतलब है चार बाइट्स का प्रतिनिधित्व करने के लिए. 889 00:38:49,360 --> 00:38:55,310 >> कोड की अब, अगली पंक्ति इस किया था, सितारा x 42 हो जाता है. 890 00:38:55,310 --> 00:38:58,530 तो 42 पर सीधा है दाएँ हाथ की ओर, जीवन का अर्थ. 891 00:38:58,530 --> 00:39:00,500 बाएं हाथ की ओर, स्टार एक्स क्या मतलब है? 892 00:39:00,500 --> 00:39:01,600 893 00:39:01,600 --> 00:39:03,280 यह ठीक है gone-- वह भी हो सकता है. 894 00:39:03,280 --> 00:39:04,220 ठीक. 895 00:39:04,220 --> 00:39:06,875 >> दर्शक: असल में, [अश्राव्य] के लिए जाना 896 00:39:06,875 --> 00:39:07,750 डेविड जे Malan: अच्छा. 897 00:39:07,750 --> 00:39:08,760 दर्शक: [अश्राव्य]. 898 00:39:08,760 --> 00:39:09,760 डेविड जे Malan: बिल्कुल. 899 00:39:09,760 --> 00:39:11,979 बाएं हाथ की ओर एक्स के लिए जाने का मतलब है. 900 00:39:11,979 --> 00:39:12,520 एक्स पता है. 901 00:39:12,520 --> 00:39:15,520 यह 33 ऑक्सफोर्ड स्ट्रीट, या OX1 की तरह है. 902 00:39:15,520 --> 00:39:18,690 और स्टार एक्स कि करने के लिए जाने का मतलब पता और क्या वहाँ रखा है? 903 00:39:18,690 --> 00:39:19,520 42. 904 00:39:19,520 --> 00:39:21,290 >> तो वास्तव में, कि निक ने ठीक यही किया. 905 00:39:21,290 --> 00:39:23,740 उन्होंने कहा, द्वारा के साथ शुरू अनिवार्य रूप से, मानसिक रूप से 906 00:39:23,740 --> 00:39:26,270 एक उंगली पर इंगित एक्स, तीर निम्नलिखित 907 00:39:26,270 --> 00:39:30,670 दाएँ हाथ पर सफेद बॉक्स करने के लिए पक्ष, और वहाँ 42 नंबर डाल. 908 00:39:30,670 --> 00:39:34,120 लेकिन फिर चीजें मिल गया एक थोड़ा खतरनाक है, है ना? 909 00:39:34,120 --> 00:39:35,860 Binky की उसके सिर खोने के बारे में. 910 00:39:35,860 --> 00:39:39,465 >> स्टार Y क्या मतलब, 13, दुर्भाग्य बराबर होती है? 911 00:39:39,465 --> 00:39:43,620 तो सितारा वाई साधन वाई में पता करने के लिए जाना. 912 00:39:43,620 --> 00:39:45,630 लेकिन वाई में पता क्या है? 913 00:39:45,630 --> 00:39:47,899 914 00:39:47,899 --> 00:39:49,440 ठीक है, यह कचरा मूल्य सही है? 915 00:39:49,440 --> 00:39:50,800 मैं एक प्रश्न चिह्न के रूप में यह आकर्षित किया. 916 00:39:50,800 --> 00:39:54,850 निक एक कर्ल करवाने तीर के रूप में यह आकर्षित किया. 917 00:39:54,850 --> 00:39:59,600 और जैसे ही आप करने की कोशिश के रूप में वहां जाने के लिए कह रही, सितारा वाई करते, 918 00:39:59,600 --> 00:40:03,872 लेकिन एक वैध नहीं है पता है, यह कुछ फर्जी स्थान है, 919 00:40:03,872 --> 00:40:05,080 कार्यक्रम दुर्घटना के लिए जा रहा है. 920 00:40:05,080 --> 00:40:08,580 और Binky के सिर जा रहा है यह रूप में किया था, यहां से उड़ान भरने के लिए. 921 00:40:08,580 --> 00:40:12,130 >> अंत में, इस कार्यक्रम तो सिर्फ फ्लैट बाहर दोष था. 922 00:40:12,130 --> 00:40:13,540 यह एक छोटी गाड़ी कार्यक्रम था. 923 00:40:13,540 --> 00:40:14,760 और यह तय होने की जरूरत है. 924 00:40:14,760 --> 00:40:18,260 और एक ही तरीका है, वास्तव में, यह तय करने के लिए हो सकता है, उदाहरण के लिए, इस लाइन, 925 00:40:18,260 --> 00:40:21,010 हम भी करने के लिए नहीं मिला है, जो क्योंकि कार्यक्रम भी जल्द ही दुर्घटनाग्रस्त हो गया. 926 00:40:21,010 --> 00:40:26,170 लेकिन हम इसे ठीक करने के लिए गए थे, तो क्या प्रभाव वाई बराबर एक्स कर रही है? 927 00:40:26,170 --> 00:40:30,010 खैर, यह अनिवार्य रूप में वाई अंक जो भी मूल्य एक्स पर इशारा कर रहा है. 928 00:40:30,010 --> 00:40:32,430 >> निक की कहानी में तो, या Binky की कहानी, दोनों 929 00:40:32,430 --> 00:40:34,640 एक्स और वाई में इशारा कर रहे थे स्मृति का सफेद हिस्सा, 930 00:40:34,640 --> 00:40:38,300 इसलिए कि, अंत में, जब आप वाई फिर 13 के बराबर होती स्टार है, 931 00:40:38,300 --> 00:40:43,080 आप में से 13 डाल अंत उचित स्थान. 932 00:40:43,080 --> 00:40:47,640 तो इन लाइनों के सभी पूरी तरह से कर रहे हैं वैध, इस एक को छोड़कर, 933 00:40:47,640 --> 00:40:51,730 यह आप से पहले हुआ जब वास्तव में वाई कुछ मूल्य सौंपा. 934 00:40:51,730 --> 00:40:54,290 >> अब शुक्र है, तुम नहीं करते सभी के माध्यम से कारण है 935 00:40:54,290 --> 00:40:56,560 अपने दम पर मुद्दों के इन प्रकार के. 936 00:40:56,560 --> 00:40:59,310 मुझे आगे जाना है और खोलने के चलो यहां एक टर्मिनल विंडो के ऊपर 937 00:40:59,310 --> 00:41:03,050 और बस एक पल के लिए, खोल, एक सुपर छोटे प्रोग्राम है कि 938 00:41:03,050 --> 00:41:04,360 भी तरह की व्यर्थ है. 939 00:41:04,360 --> 00:41:05,152 यह बदसूरत है. 940 00:41:05,152 --> 00:41:06,610 यह उपयोगी कुछ भी हासिल नहीं होता है. 941 00:41:06,610 --> 00:41:10,180 लेकिन यह मुद्दों को प्रदर्शित करता है स्मृति की, तो चलो एक नज़र रखना. 942 00:41:10,180 --> 00:41:11,830 >> मुख्य, सुपर सरल. 943 00:41:11,830 --> 00:41:14,830 यह जाहिरा तौर पर एक समारोह कॉल, च, और फिर 0 देता है. 944 00:41:14,830 --> 00:41:16,310 यह गड़बड़ यह अप करने के लिए मुश्किल की तरह है. 945 00:41:16,310 --> 00:41:18,540 तो मुख्य अब तक, बहुत अच्छा है. 946 00:41:18,540 --> 00:41:20,100 >> तो च समस्याग्रस्त है. 947 00:41:20,100 --> 00:41:22,120 और अभी ज्यादा नहीं डाली यह नामकरण में प्रयास 948 00:41:22,120 --> 00:41:23,990 यहाँ, कोड पर ध्यान केंद्रित रखने के लिए. 949 00:41:23,990 --> 00:41:25,740 च दो लाइनें है. 950 00:41:25,740 --> 00:41:27,610 और चलो अब क्या हो रहा है देखते हैं. 951 00:41:27,610 --> 00:41:29,840 तो एक तरफ here-- और मुझे बनाते हैं 952 00:41:29,840 --> 00:41:32,680 पिछले साथ इस संगत एक ओर example--, 953 00:41:32,680 --> 00:41:35,830 बाएं हाथ की ओर है अंग्रेजी में, क्या कर रहे हो? 954 00:41:35,830 --> 00:41:36,493 यह is-- 955 00:41:36,493 --> 00:41:37,701 दर्शक: एक सूचक बना रहा. 956 00:41:37,701 --> 00:41:40,830 डेविड जे Malan: एक सूचक बनाना एक पूर्णांक के लिए और बुला यह एक्स. 957 00:41:40,830 --> 00:41:43,789 तो यह उन बक्से में से एक बना रहा है मैं टच स्क्रीन पर ड्राइंग आते. 958 00:41:43,789 --> 00:41:45,913 और अब, दाएँ हाथ पर पक्ष, malloc, ज़ाहिर है, 959 00:41:45,913 --> 00:41:47,420 स्मृति का एक हिस्सा आबंटित है. 960 00:41:47,420 --> 00:41:49,989 और अभी स्पष्ट होना करने के लिए, कैसे ज्यादा स्मृति जाहिरा तौर पर यह है 961 00:41:49,989 --> 00:41:52,030 आवंटन, आप तो बस एक तरह से यहां गणित है? 962 00:41:52,030 --> 00:41:53,200 963 00:41:53,200 --> 00:41:54,040 >> तो यह 40 बाइट्स है. 964 00:41:54,040 --> 00:41:57,400 और मुझे पता है कि मैं एक पता ही है क्योंकि पूर्णांक, CS50 उपकरण पर, कम से कम, 965 00:41:57,400 --> 00:41:58,060 चार बाइट्स है. 966 00:41:58,060 --> 00:41:59,610 तो 10 गुना 4 40 है. 967 00:41:59,610 --> 00:42:04,924 तो यह एक एक्स जमा कर रहा है, पता 40 ints की पहली बाहर की कि 968 00:42:04,924 --> 00:42:07,340 वापस अंतरिक्ष आवंटित किया गया है, वापस करने के लिए, वापस करने के लिए, वापस करने के लिए. 969 00:42:07,340 --> 00:42:08,470 >> और वह malloc के बारे में महत्वपूर्ण क्या है. 970 00:42:08,470 --> 00:42:11,261 यह एक छोटी सी स्मृति नहीं ले करता है यहाँ, एक यहाँ थोड़ा, थोड़ा यहाँ. 971 00:42:11,261 --> 00:42:14,220 यह आप स्मृति का एक हिस्सा देता है समीप, परिचालन से 972 00:42:14,220 --> 00:42:15,240 प्रणाली. 973 00:42:15,240 --> 00:42:18,500 >> अब इस बारे में क्या, एक्स ब्रैकेट 10 0 के बराबर होती है? 974 00:42:18,500 --> 00:42:19,470 कोड की मनमानी लाइन. 975 00:42:19,470 --> 00:42:21,100 यह उपयोगी कुछ भी हासिल नहीं होता है. 976 00:42:21,100 --> 00:42:26,128 लेकिन यह दिलचस्प है एक्स ब्रैकेट 10-- क्योंकि? 977 00:42:26,128 --> 00:42:26,628 हाँ? 978 00:42:26,628 --> 00:42:27,912 >> दर्शक: [अश्राव्य]? 979 00:42:27,912 --> 00:42:30,500 >> डेविड जे Malan: एक्स ब्रैकेट 10 अशक्त होने की जरूरत नहीं है. 980 00:42:30,500 --> 00:42:35,070 अशक्त विस्तार ही खेलने में आता है तार के साथ एक स्ट्रिंग के अंत में. 981 00:42:35,070 --> 00:42:36,700 लेकिन एक अच्छा विचार. 982 00:42:36,700 --> 00:42:39,615 >> कितना बड़ा भी, इस सरणी है मैं 40 बाइट्स आवंटित किया है, हालांकि? 983 00:42:39,615 --> 00:42:42,560 984 00:42:42,560 --> 00:42:43,690 यह सही, नौ के माध्यम से 0 है? 985 00:42:43,690 --> 00:42:45,120 यह कुल, 10 ints है. 986 00:42:45,120 --> 00:42:48,790 40 बाइट्स, लेकिन 10 ints, 0 के माध्यम से 0 अनुक्रमित. 987 00:42:48,790 --> 00:42:50,930 >> इसलिए कि एक्स ब्रैकेट 10 क्या है? 988 00:42:50,930 --> 00:42:53,090 यह वास्तव में कुछ अज्ञात कचरा मूल्य. 989 00:42:53,090 --> 00:42:54,780 यह मेरे लिए नहीं है कि स्मृति है. 990 00:42:54,780 --> 00:42:59,650 मुझे लगता है कि छू नहीं होना चाहिए बाइट संख्या 41, 42, 43, 44. 991 00:42:59,650 --> 00:43:01,420 मैं बहुत दूर थोड़ा जा रहा हूँ. 992 00:43:01,420 --> 00:43:04,490 >> और वास्तव में, मैं चलाने अगर इस कार्यक्रम, यह बहुत अच्छी तरह से दुर्घटना हो सकती है. 993 00:43:04,490 --> 00:43:05,790 लेकिन कभी कभी, हम भाग्यशाली मिल जाएगा. 994 00:43:05,790 --> 00:43:07,706 और तो सिर्फ प्रदर्शित करने के लिए this-- और स्पष्ट रूप से, 995 00:43:07,706 --> 00:43:11,000 आप पहले कभी पता नहीं it-- की इस दौड़ करते हैं. 996 00:43:11,000 --> 00:43:12,480 यह वास्तव में दुर्घटना नहीं किया. 997 00:43:12,480 --> 00:43:15,032 >> लेकिन मैं के लिए यह बदलते हैं उदाहरण के लिए, 1000 की तरह बनना 998 00:43:15,032 --> 00:43:16,740 वास्तव में यह सुनिश्चित करने के लिए जानबूझकर, चलो देखते हैं 999 00:43:16,740 --> 00:43:18,710 हम प्राप्त कर सकते हैं अगर यह इस समय दुर्घटना करने के लिए. 1000 00:43:18,710 --> 00:43:20,070 ठीक है, यह दुर्घटना नहीं था. 1001 00:43:20,070 --> 00:43:22,600 कैसे 100,000 के बारे में? 1002 00:43:22,600 --> 00:43:25,000 चलो यह रीमेक करते हैं, और अब यह फिर से दौड़ना. 1003 00:43:25,000 --> 00:43:25,500 ठीक. 1004 00:43:25,500 --> 00:43:25,960 ओफ़्फ़. 1005 00:43:25,960 --> 00:43:26,460 ठीक है. 1006 00:43:26,460 --> 00:43:29,090 तो जाहिर है, फिर से, इन स्मृति के क्षेत्रों, तो बात है, 1007 00:43:29,090 --> 00:43:32,660 इसलिए हम कर सकते हैं, काफी बड़ी हैं बार बार भाग्यशाली हो. 1008 00:43:32,660 --> 00:43:36,510 लेकिन अंत में, एक बार आप हास्यास्पद मिल और वास्तव में, स्क्रीन पर अब तक बाहर जाना 1009 00:43:36,510 --> 00:43:39,120 आपको लगता है कि वास्तव में स्मृति को छूने वास्तव में आप से संबंधित नहीं है. 1010 00:43:39,120 --> 00:43:40,870 >> लेकिन स्पष्ट रूप से, इन कीड़े की तरह जा रहे हैं 1011 00:43:40,870 --> 00:43:43,020 कठिन है और कठिन हो अपने दम पर यह पता लगाने की. 1012 00:43:43,020 --> 00:43:47,880 लेकिन शुक्र है, प्रोग्रामर के रूप में, हम हैं हमें हमारे लिए ऐसा करने की अनुमति उपकरण है कि. 1013 00:43:47,880 --> 00:43:50,140 तो यह शायद, एक है ugliest कार्यक्रमों की, 1014 00:43:50,140 --> 00:43:52,060 GDB के उत्पादन से भी uglier. 1015 00:43:52,060 --> 00:43:55,670 लेकिन यह हमेशा एक लाइन है या सुपर उपयोगी होते हैं कि दो. 1016 00:43:55,670 --> 00:44:00,310 >> वेलग्रिंड में मदद करता है कि एक कार्यक्रम है आप एक कार्यक्रम डिबग नहीं, दर असल, 1017 00:44:00,310 --> 00:44:03,500 लेकिन स्मृति से संबंधित लगता है समस्याओं, विशेष रूप से. 1018 00:44:03,500 --> 00:44:07,590 यह स्वतः के लिए अपने कोड चलेगा आप और कम से कम दो बातों के लिए देखो. 1019 00:44:07,590 --> 00:44:10,680 एक, आप कुछ करना था स्पर्श स्मृति की तरह आकस्मिक 1020 00:44:10,680 --> 00:44:11,980 कि आप का नहीं था? 1021 00:44:11,980 --> 00:44:13,590 यह आपको उन मामलों को खोजने में मदद मिलेगी. 1022 00:44:13,590 --> 00:44:15,710 >> और दो, यह मदद मिलेगी तुम्हें बुलाया कुछ मिल 1023 00:44:15,710 --> 00:44:19,270 स्मृति लीक, हमारे पास जो पूरी तरह से नजरअंदाज कर दिया, भोलेपन से, 1024 00:44:19,270 --> 00:44:21,380 कुछ समय के लिए और सानंद. 1025 00:44:21,380 --> 00:44:23,140 लेकिन यह सब पता चला है, इस समय, जब भी 1026 00:44:23,140 --> 00:44:26,620 आप getString में बुलाया है हमारे कार्यक्रमों के इतने, 1027 00:44:26,620 --> 00:44:28,930 आप ऑपरेटिंग पूछ रहे हैं स्मृति के लिए प्रणाली, 1028 00:44:28,930 --> 00:44:32,070 लेकिन आप किसी भी याद है कभी यह दे रही है 1029 00:44:32,070 --> 00:44:36,169 पीठ, कर unalloc, या नि: शुल्क, यह कहा जाता है के रूप में. 1030 00:44:36,169 --> 00:44:37,960 नहीं, क्योंकि हम कभी नहीं किया है ऐसा करने के लिए कहा. 1031 00:44:37,960 --> 00:44:41,250 >> लेकिन यह सब समय, कार्यक्रमों तुम सी में लिख रहा हूँ 1032 00:44:41,250 --> 00:44:43,800 स्मृति लीक किया गया है, ऑपरेटिंग पूछ 1033 00:44:43,800 --> 00:44:46,190 अधिक से अधिक के लिए प्रणाली तार और whatnot के लिए स्मृति, 1034 00:44:46,190 --> 00:44:47,870 लेकिन यह वापस सौंपने कभी नहीं. 1035 00:44:47,870 --> 00:44:50,080 और अब यह एक सा है एक अति सरलीकरण की, 1036 00:44:50,080 --> 00:44:53,550 लेकिन क्या आपने कभी सोचा है, तो अपने मैक चलाने या कुछ समय के उद्घाटन के लिए अपने पीसी 1037 00:44:53,550 --> 00:44:55,790 कार्यक्रमों के बहुत सारे, शायद, कार्यक्रम समापन 1038 00:44:55,790 --> 00:44:57,795 और भले ही अपने कंप्यूटर दुर्घटनाग्रस्त हो जाने से नहीं हुआ है, 1039 00:44:57,795 --> 00:45:01,690 यह तो बहुत धीमी हो रही है यह सच है के रूप में हालांकि 1040 00:45:01,690 --> 00:45:04,290 स्मृति का एक बहुत का उपयोग या संसाधनों, भले ही, 1041 00:45:04,290 --> 00:45:06,070 अगर तुम नहीं हो भी कीबोर्ड को छू, 1042 00:45:06,070 --> 00:45:10,430 कि be-- लेकिन नहीं always-- सकती थी कार्यक्रमों आप चल रहे हैं कि हो सकता है 1043 00:45:10,430 --> 00:45:11,920 खुद को स्मृति लीक है. 1044 00:45:11,920 --> 00:45:15,645 और वे अधिक से लिए ओएस पूछते रहते हैं अधिक स्मृति, लेकिन इसके बारे में भूल, 1045 00:45:15,645 --> 00:45:18,470 वास्तव में, यह प्रयोग नहीं लेकिन इसलिए दूर स्मृति लेने 1046 00:45:18,470 --> 00:45:20,500 यह चाहते हो सकता है कि अन्य कार्यक्रमों से. 1047 00:45:20,500 --> 00:45:23,940 तो यह है कि एक आम विवरण है. 1048 00:45:23,940 --> 00:45:25,940 अब यहाँ कहाँ वेलग्रिंड की है उत्पादन पूरी तरह से है 1049 00:45:25,940 --> 00:45:29,290 उन कम करने नृशंस और समान रूप से और अधिक आरामदायक. 1050 00:45:29,290 --> 00:45:32,690 लेकिन दिलचस्प सामान यहाँ सही है. 1051 00:45:32,690 --> 00:45:37,060 यह मुझे की एक अवैध लिखने कह रही है आकार चार, इस कार्यक्रम में होता है 1052 00:45:37,060 --> 00:45:40,640 विशेष रूप से, memory.c की लाइन 21 पर. 1053 00:45:40,640 --> 00:45:45,450 >> मैं एचएम, वहाँ वास्तव में, 21 लाइन के लिए जाओ आकार चार की एक अवैध लिखना है. 1054 00:45:45,450 --> 00:45:46,250 क्यों आकार चार? 1055 00:45:46,250 --> 00:45:49,500 खैर, इस number-- और यह anything-- हो सकता है एक पूर्णांक है. 1056 00:45:49,500 --> 00:45:50,450 तो यह चार बाइट्स है. 1057 00:45:50,450 --> 00:45:52,550 इसलिए मैं चार बाइट्स डाल रहा हूँ जहां वे संबंधित नहीं है. 1058 00:45:52,550 --> 00:45:55,080 कि क्या वेलग्रिंड है वास्तव में मुझे बता रहा है. 1059 00:45:55,080 --> 00:45:57,600 इसके अलावा, यह भी होगा हम देखेंगे, मुझे बताओ, 1060 00:45:57,600 --> 00:46:01,490 आप इस एक भविष्य pset में चलाने के रूप में, अगर और आप जो वास्तव में स्मृति, लीक कर दिया है जब 1061 00:46:01,490 --> 00:46:05,300 मैंने फोन किया है, क्योंकि मैं है malloc, लेकिन मैं वास्तव में नहीं है 1062 00:46:05,300 --> 00:46:08,010 नि: शुल्क, इस मामले में, कहा जाता है, जो हम अंततः देखेंगे 1063 00:46:08,010 --> 00:46:09,830 malloc के विपरीत है. 1064 00:46:09,830 --> 00:46:10,860 1065 00:46:10,860 --> 00:46:12,930 >> तो अब, मैं एक अंतिम उदाहरण लगता है. 1066 00:46:12,930 --> 00:46:14,050 1067 00:46:14,050 --> 00:46:16,690 तो यह एक छोटे से अधिक है रहस्यमय है, लेकिन यह शायद है 1068 00:46:16,690 --> 00:46:19,180 के लिए सबसे बड़ा कारण , स्मृति के साथ सावधान रहना 1069 00:46:19,180 --> 00:46:24,490 और कारण यह है कि कई कार्यक्रमों और यहां तक ​​कि इस दिन के लिए / या वेब सर्वर,, 1070 00:46:24,490 --> 00:46:28,200 कहीं बुरे लोगों द्वारा उठाए गए हैं इंटरनेट पर किसी भी तरह कौन हैं 1071 00:46:28,200 --> 00:46:33,390 अपने सर्वर से फर्जी पैकेट भेजने अपने खातों समझौता करने की कोशिश कर रहा, 1072 00:46:33,390 --> 00:46:36,420 या अपने डेटा ले, या बस आम तौर पर एक मशीन पर ले. 1073 00:46:36,420 --> 00:46:38,910 बफर अतिप्रवाह, के रूप में नाम का मतलब पता चलता है 1074 00:46:38,910 --> 00:46:40,740 नहीं एक पूर्णांक, लेकिन एक बफर बह निकला. 1075 00:46:40,740 --> 00:46:43,490 और एक बफर सिर्फ एक अच्छा तरीका है कहने का यह स्मृति का एक गुच्छा है. 1076 00:46:43,490 --> 00:46:46,710 >> और वास्तव में, मैं एक स्ट्रिंग बुलाया बजाय एस के बफर, पहले. 1077 00:46:46,710 --> 00:46:49,234 यह एक बफर है क्योंकि अगर, यूट्यूब अर्थ में जैसे, 1078 00:46:49,234 --> 00:46:52,400 या आप एक वीडियो देख रहे हैं किसी भी समय, आप शब्द बफरिंग देखा हो सकता है, 1079 00:46:52,400 --> 00:46:53,040 डॉट, डॉट डॉट. 1080 00:46:53,040 --> 00:46:54,240 यह अविश्वसनीय रूप से परेशान है. 1081 00:46:54,240 --> 00:46:55,990 और ये सिर्फ मतलब अपने वीडियो प्लेयर है कि 1082 00:46:55,990 --> 00:46:58,710 बहुत से डाउनलोड करने के लिए कोशिश कर रहा है बाइट्स की बाइट्स की, बहुत सारे 1083 00:46:58,710 --> 00:47:00,170 इंटरनेट से एक वीडियो से. 1084 00:47:00,170 --> 00:47:02,920 लेकिन यह धीमी है, तो यह कोशिश कर रहा है उनमें से एक गुच्छा डाउनलोड करने के लिए 1085 00:47:02,920 --> 00:47:06,430 इतना है कि एक बफर, एक कंटेनर को भरने के लिए आपको लगता है कि यह तो कर सकते हैं पर्याप्त बाइट्स है 1086 00:47:06,430 --> 00:47:09,174 , आप वीडियो दिखाने लगातार रोक के बिना. 1087 00:47:09,174 --> 00:47:11,340 लेकिन यह आप कर सकते हैं, पता चला है यह बड़ा करने के लिए एक बफर है. 1088 00:47:11,340 --> 00:47:15,710 लेकिन में इतना डेटा रखने की कोशिश यह, और बहुत बुरी बातें हो सकता है. 1089 00:47:15,710 --> 00:47:22,780 उदाहरण के लिए तो, चलो हम देखते हैं एक उदाहरण के इस अंतिम चिढ़ाने. 1090 00:47:22,780 --> 00:47:24,720 यह एक कार्यक्रम है कि, पहली नज़र में, 1091 00:47:24,720 --> 00:47:26,540 सुपर उपयोगी कुछ भी नहीं है. 1092 00:47:26,540 --> 00:47:29,590 यह एक मुख्य समारोह मिल गया है कि च, कि समारोह कहता है. 1093 00:47:29,590 --> 00:47:36,640 और उस समारोह, एफ, यहाँ है, एक चार सरणी, आकार 12 के, सी कहा जाता है. 1094 00:47:36,640 --> 00:47:39,340 और फिर यह इस का उपयोग कर रहा है नई समारोह strncpy बुलाया. 1095 00:47:39,340 --> 00:47:40,430 1096 00:47:40,430 --> 00:47:45,190 >> यह इस सरल के साथ, पता चला है कि कोड की सरल रेखा, बस दो लाइनों, 1097 00:47:45,190 --> 00:47:49,130 हम, मेरे पूरे कार्यक्रम बनाया है और इसलिए, अपने पूरे कंप्यूटर, 1098 00:47:49,130 --> 00:47:54,000 और मेरा उपयोगकर्ता खाता, और मेरे हार्ड किसी को भी संभावित कमजोर ड्राइव 1099 00:47:54,000 --> 00:47:58,170 कौन जानता है और चलाने के लिए काफी अच्छा है एक खास कमांड लाइन के साथ इस कार्यक्रम 1100 00:47:58,170 --> 00:47:58,900 तर्क. 1101 00:47:58,900 --> 00:48:03,400 दूसरे शब्दों में, अगर यह बुरा लड़का टाइप करके argvargv [1] के अंदर डालता है 1102 00:48:03,400 --> 00:48:08,750 कुंजीपटल एक बहुत विशेष रूप से तैयार की जाती है पर स्ट्रिंग, नहीं एबीसी, 123, लेकिन अनिवार्य रूप से, 1103 00:48:08,750 --> 00:48:15,180 निष्पादन योग्य का प्रतिनिधित्व करते हैं कि द्विआधारी चिह्न कोड, वह या वह लिखा था कि एक कार्यक्रम, 1104 00:48:15,180 --> 00:48:19,190 जो इस साधारण प्रोग्राम के साथ कार्यक्रमों के हजारों के प्रतिनिधि 1105 00:48:19,190 --> 00:48:23,610 कि, हिम्मत, वैसे ही कमजोर कर रहे हैं वह या वह अंततः सभी को नष्ट कर सकते हैं 1106 00:48:23,610 --> 00:48:26,680 मेरे हार्ड ड्राइव पर फाइल, एक मिल वह या वह कर सकते हैं कि इतना शीघ्र निमिष 1107 00:48:26,680 --> 00:48:30,170 अपने दम पर आदेश टाइप करें, खुद के लिए सभी फाइलों को ईमेल करें. 1108 00:48:30,170 --> 00:48:34,660 मैं क्या कर सकता है कि कुछ भी है, वह या वह इस कोड के साथ कर सकते हैं. 1109 00:48:34,660 --> 00:48:36,575 >> हम अभी तक इस का समाधान नहीं होगा. 1110 00:48:36,575 --> 00:48:38,700 और वास्तव में, यह जा रहा है एक छोटी सी तस्वीर शामिल 1111 00:48:38,700 --> 00:48:41,470 इस तरह, हम जल्द ही आता हूँ जो सभी को बेहतर समझने के लिए. 1112 00:48:41,470 --> 00:48:44,480 लेकिन आज के लिए, पर अंत एक से थोड़ा अधिक उम्मीद है, क्या है 1113 00:48:44,480 --> 00:48:48,360 समझा जा xkcd मजाक, हम अगली बार फिर से शुरू तक. 1114 00:48:48,360 --> 00:48:51,100 1115 00:48:51,100 --> 00:48:51,600 ठीक है. 1116 00:48:51,600 --> 00:48:53,446 बुधवार को मिलते हैं. 1117 00:48:53,446 --> 00:48:54,754 >> [संगीत खेल] 1118 00:48:54,754 --> 00:48:57,790 >> अध्यक्ष: और अब, गहरी Daven Farnham द्वारा विचार,. 1119 00:48:57,790 --> 00:49:00,890 1120 00:49:00,890 --> 00:49:04,770 स्मृति का एक ढेर में कूद की तरह है एक रविवार की दोपहर को स्वर्ण पत्तियों. 1121 00:49:04,770 --> 00:49:09,000 हवा बह रही, पोट अपने ओह hair--, मैं दिन when-- याद आती है 1122 00:49:09,000 --> 00:49:11,100 1123 00:49:11,100 --> 00:49:12,650 >> [हंसी] 1124 00:49:12,650 --> 00:49:13,750