[संगीत खेल] आरओबी BODEN: सब ठीक है. वीडियो का पहला तो, पहली बात, एक परिचित चेहरे से. [वीडियो प्लेबैक] सब सही. इस CS50 है, और यह है सप्ताह में तीन की शुरुआत. मुझे लगता है मैं तुम्हारे साथ नहीं हो सकता माफी चाहता हूँ आज, लेकिन मुझे शुरू करने की अनुमति CS50 की अपनी रोब Boden. [अंत वीडियो प्लेबैक] [वाहवाही और चियर्स] आरओबी BODEN: में फिल्मोग्राफी उस वीडियो शानदार है. ठीक है. तो सबसे पहले, एक और दोपहर का भोजन नहीं है. यह 1:15 पर कल है. इस शुक्रवार कोई दोपहर का भोजन नहीं है. यह Quora साथ है. और टॉमी एक की लेकिन, अभी तक यहाँ नहीं है पूर्व प्रमुख सीएफ है लोगों को, टॉमी McWilliam. तो वह एक मजेदार आदमी है. तुम आ जाना चाहिए. ठीक है. इसलिए पिछले हफ्ते, हम अलग तोड़ने शुरू कर दिया एक स्ट्रिंग वास्तव में क्या है के बारे में. हम शुरुआत के बाद से जाना जाता है कि यह वर्ण के एक दृश्य है. लेकिन पिछले हफ्ते, हम इस तथ्य में delved क्या वास्तव में एक दृश्य है कि वर्ण, ठीक है, अब हम है वर्णों की सरणियों. और हम एक स्ट्रिंग, यह एक सरणी है कि पता वर्ण की, बहुत अंत में, हम इस विशेष अशक्त बाइट है, इस बैकस्लैश 0, कि अंत का संकेत करता है स्ट्रिंग. और इसलिए एक स्ट्रिंग के एक सरणी है वर्ण, लेकिन हम कर सकते हैं और अधिक से अधिक पात्रों का सिर्फ एक सरणी, हम किसी की एक सरणी हो सकता है हम चाहते हैं कि बात के प्रकार. तो, अगर आप पिछले सप्ताह से याद करते हैं, डेविड पेश किया कि उम्र के कार्यक्रम वास्तव में जल्दी. हम क्या करने जा रहे हैं तो पहली बात है , एक पूर्णांक के लिए उपयोगकर्ता पूछना कमरे में लोगों की संख्या. हम चाहते हैं कि पूर्णांक है एक बार, हम एक सरणी की घोषणा कर रहे हैं. इस ब्रैकेट वाक्यविन्यास सूचना है. तुम्हें पता है कि करने के लिए इस्तेमाल किया पाने के लिए जा रहे हैं. इसलिए हम पूर्णांकों की सरणी घोषणा कर रहे हैं उम्र कहा जाता है, और एन रहे हैं इस सरणी में पूर्णांकों. यहीं तो इस पैटर्न, इस 4 INT मुझे लगता है मैं ही, मैं कम से कम पता है, 0 के बराबर होती है साथ ही, यह भी कहा कि एक पैटर्न होने जा रहा है तुम बहुत करने के लिए इस्तेमाल किया जाना है. कि बहुत ज्यादा आप कर रहे हैं कि कैसे क्योंकि हमेशा सरणियों पुनरावृति करने जा रही है. तो पता है कि याद हमारे सरणी की लंबाई. और तो यहाँ, हम बार बार पूछ रहे हैं कमरे में व्यक्ति मैं की उम्र के लिए. इस के बाद, हम नीचे जाना, और जो कुछ भी मनमाना कारण, हम तो वे जा रहे हैं कि कैसे पुराने प्रिंट आउट अब से एक साल होने के लिए. और कहा कि कार्यक्रम चल रहा है, चलो उम्र बनाने स्लैश उम्र डॉट. तो कमरे में लोगों की संख्या, तीन वहाँ रहे हैं कहते हैं. और, पहले व्यक्ति 13 है, कहते हैं अगले 26 है, और पिछले 30 है. तो फिर यह उन तीन पर पुनरावृति करेंगे लोगों को, 14 से 27, और 31 प्रिंट. तो याद है कि हम एक घोषित आकार n की सरणी, कि में सूचकांक सरणी, सरणी मान है और सूचकांक 0, 1, 2, सभी तरह ऊपर n करने के लिए शून्य से 1. तो हमने कहा कि जब तीन लोग थे कमरे में, और हम यहाँ में डाल इस के माध्यम से पहली यात्रा पाश, मैं 0 होने जा रहा है. तो इंडेक्स 0 में. हम पहले बताए हैं उपयोगकर्ता में प्रवेश करती है उम्र. फिर अगले एक में, हम प्रवेश कर रहे हैं दूसरा N उपयोगकर्ता में प्रवेश करती है, और में दो, पिछले n करने के लिए अगले. तो नोटिस कि आकार की एक सरणी तीन कुछ भी नहीं है सूचकांक तीन में. यह मान्य नहीं है. ठीक है. तो, यहाँ वापस जा रहा. तो अब हम सरणियों के साथ पेश किया है कि, हम कुछ परिचित है. अब हम आदेश पर स्थानांतरित करने के लिए जा रहे हैं होने जा रहे हैं, जो लाइन तर्क, इस समस्या को सेट करने के लिए बहुत प्रासंगिक है. तो अब तक, जब भी तुम हो अपने मुख्य समारोह घोषित, हम है int मुख्य शून्य कहा. तो शून्य सिर्फ मतलब है कि हम किसी भी गुजर नहीं कर रहे हैं इस समारोह के लिए तर्क. अब हम चाहते हैं कि मुख्य देखने जा रहे हैं कुछ तर्क ले सकते हैं. यहाँ हम argc INT उन्हें फोन और स्ट्रिंग argv कोष्ठक. कोष्ठक, एक बार फिर, यह दर्शाता हम सरणियों के साथ काम कर रहे हैं. तो यहाँ, स्ट्रिंग argv कोष्ठक, हम कर रहे हैं तारों की एक सरणी के साथ काम कर. तो argc, संकेत मिलता है कि जा रहा है हम है कि कितने तर्क इस कार्यक्रम के लिए दिया गया. और, इसका मतलब है कि क्या देखने के लिए चलो इस बंद करते हैं. ठीक है. तो अब तक, हम हर भाग लिया डॉट स्लेश उम्र की तरह कार्यक्रम. हम भी कर सकते हैं, कमांड लाइन पर, अतीत तर्क पास, इस प्रकार शब्द, कमान लाइन तर्क. तो पहला तर्क, हैलो दुनिया. तो यहाँ, argc तीन होगा. यह तर्क की गिनती है कमांड लाइन पर. Argc, हमेशा कम से कम 1 के बाद से डॉट , खुद को उम्र स्लेश, में से एक के रूप में गिना जाता है कमांड लाइन तर्क. फिर नमस्ते सबसे पहले है. डॉट स्लेश उम्र तो, zeroth है तो नमस्कार सबसे पहले है, और दुनिया है दूसरी कमांड लाइन तर्क. तो स्ट्रिंग argv, हम देखने जा रहे हैं, तार, डॉट स्लेश शामिल उम्र, हैलो, और दुनिया. और दाऊद के अनुरोध से, हम जा रहे हैं कि शुरू करने के लिए एक वीडियो खेलने के लिए. [वीडियो प्लेबैक] ऊपर हमने कार्यक्रमों में अब तक लिखा है, हम की घोषणा की है मुख्य रूप int मुख्य शून्य. और यह सब समय, उस शून्य है बस को निर्दिष्ट किया गया है कि कार्यक्रम किसी भी नहीं ले करता है कमांड लाइन तर्क. एक उपयोगकर्ता एक चलता है, तो दूसरे शब्दों में, कार्यक्रम, वह या वह आदेश प्रदान कर सकते हैं अतिरिक्त लिख कर लाइन तर्क शब्दों या वाक्यांशों के बाद कार्यक्रम की प्रॉम्प्ट पर नाम है. खैर, आप अपने कार्यक्रम के लिए चाहते हैं यदि आप करते हैं कमांड लाइन तर्क, एक या ले अधिक ऐसे शब्दों, हम बदलने की जरूरत तर्क के एक जोड़े के साथ शून्य. तो चलो करते हैं. CS50.h. शामिल करें मानक io.h. शामिल करें मुख्य इंट. और अब, बजाय शून्य की, मैं जा रहा हूँ एक argc बुलाया INT, और एक निर्दिष्ट argv बुलाया तार के सरणी. अब, argc और argv हैं बस सम्मेलनों. हम इन तर्कों कहा हो सकता है हम चाहते हैं कि सबसे कुछ. लेकिन क्या महत्वपूर्ण है argc है कि है एक पूर्णांक परिभाषा के द्वारा, यह है, क्योंकि तर्क की गिनती होते जा रहे हैं, कुल शब्दों की संख्या कि उपयोगकर्ता उसके प्रांप्ट पर टाइप किया गया है. argv, इस बीच, तर्क वेक्टर, है वास्तव में भंडारण के एक सरणी होने जा रहा उपयोगकर्ता है कि शब्दों के सभी अपने या अपने प्रांप्ट पर टाइप. चलो अब कुछ करने के लिए आगे बढ़ना इनमें से एक या अधिक के साथ कमांड लाइन तर्क. विशेष रूप से, के आगे और प्रिंट चलते हैं जो भी शब्द उपयोगकर्ता प्रकार कार्यक्रम के नाम के बाद प्रॉम्प्ट पर. ओपन ब्रैकेट. बंद कोष्ठक. Printf प्रतिशत है बैकस्लैश और अल्पविराम. और अब मैं printf क्या मूल्य बताने की जरूरत उस प्लेसहोल्डर में प्लग. मैं उपयोगकर्ता है कि पहला शब्द चाहते हैं कार्यक्रम के नाम के बाद लिखा है, और इसलिए मैं निर्दिष्ट करने के लिए जा रहा हूँ argv ब्रैकेट 1, करीब कोष्ठक, अर्धविराम. अब, क्यों ब्रैकेट 1 और नहीं ब्रैकेट 0? खैर, यह स्वचालित रूप से संग्रहीत पता चला है, argv में 0 होने जा रहा है कार्यक्रम का वास्तविक नाम. तो पहला शब्द है कि उपयोगकर्ता प्रकार कार्यक्रम के नाम से है, के बाद सम्मेलन होने जा रहा argv 1 में संग्रहीत. चलो अब संकलन करते हैं और इस कार्यक्रम चलाते हैं. Argv 0, डॉट स्लेश argv 0 बनाओ. और अब एक शब्द नमस्ते की तरह. दर्ज करें. और वहाँ हम नमस्कार, यह है. [अंत वीडियो प्लेबैक] आरओबी BODEN: सब ठीक है. कि बंद. तो उस कार्यक्रम पर एक नज़र लेने कि हम बस, ठीक है, हमारे पास अभी शुरू हम 0 argv मुद्रित अगर अब, बनाने, दिखाने के लिए यह argv 0, डॉट स्लेश argv 0 क्या है. उम्मीद के रूप में तो, यह बाहर मुद्रण है argv 0 है के बाद से, प्रोग्राम का नाम हमेशा होने जा रहा प्रोग्राम का नाम. लेकिन कुछ एक करते हैं अधिक दिलचस्प बिट. इसलिए इस समस्या सेट में, आप हो जाएगा इस समारोह में, atoi के लिए पेश किया. तो क्या हम के लिए atoi प्रयोग करते हैं? यही कन्वर्ट करने के लिए जा रहा है एक एक पूर्णांक के लिए स्ट्रिंग. तो मैं स्ट्रिंग पास है, एक दो तीन, atoi करने के लिए, कि बदल देंगे कि पूर्णांक के लिए, एक दो तीन. इसलिए हम पहले कन्वर्ट करने के लिए जा रहे हैं एक पूर्णांक के लिए कमांड लाइन तर्क, और फिर बस कि पूर्णांक मुद्रित. तो बुनियादी तौर पर, हम एक तरह से कर रहे हैं बस, getint reimplementing पूर्णांक आदेश पर दर्ज किया गया है रेखा के बजाय कार्यक्रम में interactively. तो फिर, argv 0 बनाने, चलो यहां यह, और कहा कि बंद. तो argv 0 चल रहा है, और का प्रवेश पूर्णांक, एक दो तीन चार एक दो. तो यह एक पूर्णांक मुद्रित करेंगे दो तीन चार एक दो. कि atoi करने के लिए कुछ बारीकियों रहे हैं यह कुछ के बारे में देखभाल बंद कर देंगे एक वैध संख्यात्मक चरित्र से परे, लेकिन इससे कोई फर्क नहीं पड़ता. तो आप क्या होता है क्या लगता है यदि मैं यह कर? विभाजन गलती. तो ऐसा क्यों है? आप हमारे कार्यक्रम में वापस देखो, हम कर रहे हैं argv 1, पहला तर्क परिवर्तित कार्यक्रम के नाम के बाद, एक पूर्णांक के लिए. लेकिन पारित कर कोई तर्क नहीं है कार्यक्रम के नाम के बाद. यहाँ तो, हम इस एक छोटी गाड़ी है कि देखना कार्यक्रम के बाद से, हम इसे चलाने के लिए प्रयास करें तो किसी भी तर्क के बिना, यह बस दुर्घटना होगा. आप देखेंगे तो एक अन्य आम पैटर्न कुछ की तरह, argc कम है वहाँ नहीं था यह दर्शाता है कि दो, की तुलना कम से कम कार्यक्रम का नाम और एक पहला तर्क है, तो हम कुछ नहीं हूँ जैसे printf, पर्याप्त नहीं कमांड लाइन तर्क. कि शायद मुद्रित करने के लिए एक अच्छा नहीं है, यह पसंद है, शायद कुछ है आप एक पूर्णांक में प्रवेश करना चाहिए कमांड लाइन पर. मैं बस वहाँ यह समाप्त होगा. और फिर 1 वापसी. इसलिए हमारे के अंत में याद है कि कार्यक्रम, हम 0 वापसी अगर, उस तरह का सफलता का संकेत है. और मुख्य भी स्वतः अगर तुम नहीं 0 देता. तो यहाँ, हम इंगित करने के लिए 1 retuning कर रहे हैं उस सफलता नहीं है. और आप चाहते हैं जो कुछ भी वापसी कर सकते हैं, बस, 0 सफलता को इंगित करता है, और कुछ और विफलता को इंगित करता है. तो चलो चीजों के इस संस्करण चलाते हैं. तो अब, हम एक कमांड लाइन दर्ज नहीं करते हैं तर्क, यह सही ढंग से बताता हूँ हमें पर्याप्त कमांड लाइन नहीं. वाक्य पूरा नहीं किया. वरना, हम वास्तव में यह एक पास हैं, यह कार्यक्रम को पूरा कर सकते हैं. तो यह आप में argc प्रयोग करेंगे कैसे है की संख्या को मान्य करने के आदेश कमांड लाइन तर्क है कि वास्तव में पारित कर रहे हैं. तो चलो थोड़ा और अधिक इस कार्यक्रम बनाते हैं जटिल है, और दूसरे को देखो बातों का चलना. तो अब, हम केवल मुद्रण नहीं कर रहे हैं पहली कमांड लाइन तर्क. यहाँ, हम int मैं बराबरी से पुनरावृति रहे 0, मैं, मैं argc से भी कम है प्लस साथ ही, और मुद्रण argv, सूचकांक मैं. तो इस पैटर्न, फिर, यह एक ही है बजाय छोड़कर पहले ही पैटर्न, चर बुलाने की एन, हम argc प्रयोग कर रहे हैं. तो यह हर सूचकांक पर iterating है सरणी में, और प्रत्येक मुद्रण उस सरणी में तत्व. और हां, तो हम इस प्रोग्राम चलाते हैं, ठीक है, मैं किसी भी कमांड लाइन दर्ज नहीं किया तर्क, सिर्फ प्रिंट यह तो कार्यक्रम का नाम. मैं चीजों की एक गुच्छा दर्ज करते हैं, यह हूँ एक, अपनी पंक्ति में प्रत्येक मुद्रित. ठीक है. तो चलो यह एक कदम आगे ले लो. और बदले प्रत्येक तर्क छपाई की अपनी पंक्ति में, एक प्रिंट प्रत्येक तर्क का चरित्र अपनी पंक्ति में. तो argv है कि याद तारों की एक सरणी. तो क्या एक स्ट्रिंग है, लेकिन अक्षर की एक सरणी? इसलिए कि argv वास्तव में इसका मतलब है कि एक अक्षर की एक सरणी के सरणी. इसलिए इस बात का फायदा उठाते हुए चलो अभी के लिए इस की उपेक्षा करते हैं. चलो बस स्ट्रिंग argv 0 विचार करें. हम प्रत्येक चरित्र के लाना चाहते हैं तो argv 0 अपनी पंक्ति में है, तो मैं चाहता हूँ हम करने के लिए इस्तेमाल कर रहे हैं पैटर्न क्या करना, मैं है सरणी की लंबाई से कम, यहां के strlen है, जो कि है मैं नहीं करना चाहता क्या, स्ट्रिंग एस argv 0 के बराबर होती है. इसलिए मैं अपने की लंबाई की तुलना में कम है इस मामले में एक सरणी है जो सरणी, वर्ण, मैं प्लस प्लस. हम पिछले सप्ताह देखा और हां, यह आदर्श है हम बाहर strlen कि अगर इस कदम हालत की, क्योंकि n जोड़ दिया जाएगा एस के strlen हम चले हर समय पाश के माध्यम से, और यह बात है बदलते नहीं होने जा रहा. तो हम यहाँ पर पता करने के लिए बराबर यह निर्धारित करेंगे. ठीक है. तो अब, हम पर iterating कर रहे हैं सरणी में प्रत्येक सूचकांक. और हां, तो हम प्रत्येक मुद्रित करना चाहते हैं उस सरणी, प्रतिशत सी में चरित्र है हम प्रयोग करना चाहते झंडा पात्रों के लिए. और अब एक ब्रैकेट मैं होने जा रहा है स्ट्रिंग, सूचकांक चरित्र मैं, यदि ऐसा है तो स्ट्रिंग नमस्कार थे. फिर ब्रैकेट, 0 घंटे होने जा रहा है एस एस 1 इतने पर ई हो जाएगा, और. तो अब हम गठबंधन चाहते हैं इन दो बातें. हम प्रत्येक वर्ण मुद्रित करना चाहते हैं प्रत्येक कमांड लाइन तर्क की. तो हम करने जा रहे हैं एक पाश के लिए नेस्ट. और पारंपरिक, पहले काउंटर मैं अगले जम्मू होने जा रहा है, n है argv मैं के strlen हो जाएगा, मैं कम से कम पता है, मैं अधिक से अधिक है. और अब के बजाय मुद्रण argv मैं की, तो मैं सूचकांक जा रहा है argv ब्रैकेट - कि मैं वें कमांड लाइन होने जा रहा है तर्क, argv मैं, जम्मू जा रहा है JTH चरित्र का होना मैं वें तर्क. मैं अब यहाँ इस के ऊपर से छुटकारा मिल जाएगा हम चाहते हैं कि पाश में डाल दिया है. तो स्ट्रिंग के बराबर होती है के बराबर है argv मैं, और फिर एस ब्रैकेट जम्मू. खैर, हम घोषित करने की जरूरत नहीं है इस चर है. इसके बजाय, हम सिर्फ इन गठबंधन करेंगे हम क्या था में दो, जम्मू मैं argv. स्पीकर 1 [सुनाई]. आरओबी BODEN: फोन अच्छा है. तो यह टूट गया है. मैं वास्तव में यह भाग गया, तो हम करेंगे इस एहसास हो गया है. मैं देखभाल के बारे में तो काउंटर के लिए यह विशेष रूप से पाश जम्मू, iterator है. तो अगर आप मुद्दों में चला गया होगा, शायद एक अनंत लूप, अगर हम कि ठीक नहीं किया गया था. हम भी बात कर रहे हैं यही कारण है कि के बारे में आज डिबगिंग. ठीक है. तो चलो इस कार्यक्रम चलाते हैं. और हम वास्तव में एक अलग printf जोड़ दें यहीं बस प्रिंट होगा कि इसका मतलब यह है के बाद से एक और लाइन, जब हम कार्यक्रम चलाने के लिए, एक खाली वहाँ हो जाएगा प्रत्येक चरित्र के बीच में लाइन प्रत्येक कमांड लाइन तर्क. खैर, हम मतलब है कि क्या देखेंगे. OOP. कुछ बग मिला. त्रुटि उलझाव की घोषणा पुस्तकालय समारोह strlen. इसलिए हमारे कार्यक्रम में वापस जा रहे हैं, मैं string.h शामिल हैश करने के लिए भूल गया. तो string.h होने जा रहा है वाणी कि हेडर फाइल समारोह strlen. ठीक है, यह compiles. अब, इसे चलाते हैं. तो बस. इसे बाहर प्रिंट करने जा रहा है हमारे कार्यक्रम का नाम, हैलो दुनिया. यह हर, हर बात मुद्रित करने के लिए जा रहा है अपनी पंक्ति में चरित्र,. ठीक है. तो चलो वास्तव में इस ले जाने एक कदम आगे. और बदले string.h का उपयोग कर के, चलो हम अपने ही लागू होगी के बारे में सोचना strlen समारोह. तो मैं तुरंत दे दूँगा एक समारोह के हस्ताक्षर. तो चलो my_strlen में फोन करते हैं, और यह बात है एक तर्क के रूप में एक स्ट्रिंग लेने के लिए जा रहा है, और हम वापसी की उम्मीद कि स्ट्रिंग की लंबाई. तो, जहां उस आदमी है? हां. ठीक है. तो पहले स्लाइड से याद है कि पिछले सप्ताह से भी था कि एक पात्रों की सरणी, अच्छी तरह से, एक स्ट्रिंग, तो चलो यह हमारी स्ट्रिंग एस कहते हैं. तो चलो स्ट्रिंग है, तो हैलो, तो, एच ई एल एल ओ, स्मृति में, कि जा रहा है तो इस बैकस्लैश हो, और 0 चरित्र. तो कैसे हम एस की लंबाई मिलता है? खैर, चाल इस बात के लिए लग रही है 0 चरित्र, इस अशक्त बैकलैश टर्मिनेटर. तो एल्गोरिथ्म जा रहा है कुछ ऐसा कुछ हो पर्याप्त वर्ण कि - चलो इस हाथ से कुछ का प्रतिनिधित्व करते हैं काउंटर, चलो इस INT लंबाई कहते हैं. तो, यहाँ से शुरू करते हुए, हम कर रहे हैं हमारे स्ट्रिंग अधिक पुनरावृति करने के लिए जा रहा है. इसलिए, यह एच पहला वर्ण है, और इसे वापस तो, 0 स्लेश नहीं है लंबाई 1 है. अगले चरित्र को पुनरावृति, ई, और यह 0 बैकस्लैश नहीं है. लंबाई 2 है. एल, 3. एल, 4. हे, 5. और अंत में, हम बैकस्लैश तक पहुँचने 0, और तो इसका मतलब है, ठीक है, इस स्ट्रिंग खत्म हो गया है. तो चलो 5 वापस कर दें. तो वास्तव में, पहले, कि लागू मेरी एन लंबाई मेरे दाहिने हाथ, 0 के बराबर होती है. और हम पुनरावृति करने के लिए जा रहे हैं - स्पीकर 1 [सुनाई] आरओबी BODEN: ओह, गोली मार. फोन अच्छा है. बूम. तो एन लंबाई 0 के बराबर होती है. तो अब, जबकि लंबाई नहीं करता तो बराबर और, बैकस्लैश 0. तो, यह बैकस्लैश 0 याद रखना, यह एक है वास्तविक चरित्र, और यह इंगित करता है स्ट्रिंग के अंत. वैसे ही जैसे, भी, बैकस्लैश n एक वास्तविक चरित्र है. बैकस्लैश 0 इंगित करने के लिए जा रहा है हमारे स्ट्रिंग के अंत. मैं वहाँ रखा है कि नहीं करना चाहती. और लंबाई से अनुक्रमित नहीं है, जबकि अशक्त टर्मिनेटर के बराबर है, तो हम सिर्फ लंबाई बढ़ाने के लिए जा रहे हैं. तो फिर, हमारे कार्यक्रम के अंत में, लंबाई अंत में जा रहा है इस मामले में 5 हो. और हम बस लंबाई वापस कर देंगे. ठीक है. तो अब यहाँ नीचे, मुझे नहीं पता my_strlen करना. सुनिश्चित करने के लिए यह संकलन करते हैं सब कुछ ठीक ठाक चलता है. मैं 2 में कर रहा था? या 1 था? कि क्या करना चाहिए. ठीक है. तो इस argv 2 है. प्रत्याशित के रूप में काम करता है, हालांकि एक मैं उस में किया था? हां. ठीक है. चीजों के इस संस्करण में नहीं था printf नई बाद लाइन, लेकिन यह कोई फर्क नहीं पड़ता. ठीक है. उम्मीद के रूप में तो काम किया. अब हम भी इस एक कदम गठजोड़ कर सकते हैं इसके अलावा, यहां जहां नोटिस, अच्छी तरह से, सबसे पहले, हम argv की strlen हथियाने रहे हैं मैं, और फिर हम पर iterating कर रहे हैं कि स्ट्रिंग में प्रत्येक चरित्र. तो बजाय कर रही है कि, क्या हुआ अगर हम बस इंतजार कर के इस तर्क गठबंधन हम बैकस्लैश 0 सही मारा जब तक पाश के लिए इस मामले में? Argv मैं, जम्मू करता है इसलिए जब पुनरावृति बराबर नहीं बैकस्लैश 0. तो चलो पहले इसे चलाते हैं. ठीक है. यहाँ तो, इस हालत कह रहा है - के स्पष्ट है कि चलो. तो अब, यह हमारे argv हो. तो मैं बस से पहले उस कार्यक्रम में भाग गया जब, argv तारों की एक सरणी है. और हां, मैं डॉट स्लेश argv साथ इसे चलाने अगर 2, नमस्ते विश्व, तो argv खुद argv के लिए, लंबाई 3 है शून्य, हैलो, और दुनिया. और इन सूचकांकों में से प्रत्येक के अंदर है खुद यह हो जाएगा, जहां एक सरणी, डॉट, इस कड़ी आलोचना हो जाएगा, मैं नहीं जानता यह सही दिशा था, तो मैं यह था नहीं लगता. ए आर वी पानी का छींटा, अधिक स्थान की आवश्यकता है. चलो इस सरणी में कटौती करते हैं. ए आर वी पानी का छींटा 0, और फिर बैकस्लैश 0. और फिर अव्यवस्था में नमस्कार किया जाएगा. के, एच ​​ई बैकस्लैश 0 कहते हैं. और अंत में, डब्ल्यू ओ बैकस्लैश 0. तो हम सिर्फ लिखा था कि एल्गोरिथ्म, वे क्या कर रहे हैं छोरों, के लिए नेस्ट कर, हम पहली बार है मैं और फिर जम्मू मुकाबला. इस पर कोड के साथ आसान होगा स्क्रीन, की पीठ इस के लिए चलते हैं. ठीक है. तो मैं है कि iterator है कि नोटिस प्रत्येक निर्देश पर iterating लाइन तर्क. और जम्मू iterator पुनरावृति है उस में प्रत्येक चरित्र के ऊपर कमांड लाइन तर्क. तो इस अंतरतम printf क्या कर रहा है , हम argv 0 0, printf printf है है argv 0 1, printf argv 0 2, 0, 3 0 4, 0 5, 0, 6, लेकिन अब, argv 0 7 करने जा रहा है बराबर बैकस्लैश 0. तो फिर हम पाश के लिए है कि बाहर निकलने, और अब मैं 1 के लिए iterates. और अब हम प्रिंट लिए जा रहे हैं argv 1 0, argv 1 1 - खैर, अब, मैं कम नमस्ते कटौती के बाद से, argv 1 2 फिर से होने जा रहा है बैकस्लैश 0. और हां, मैं वेतन वृद्धि और जारी है, और इतने पर, जब तक हम सभी बाहर प्रिंट दुनिया, और उन तीन कमांड लाइन कर रहे हैं तर्क, और हम में से बाहर निकलें हूँ सबसे बाहरी पाश, और हमारे कार्यक्रम खत्म. ठीक है. तो चलो यहाँ वापस आते हैं. तो आप के साथ कुछ परिचित मिलेगा इस पर कमांड लाइन तर्क विशेष समस्या निर्धारित किया है. अब, डिबगिंग. तो आप शायद पहले से ही करना पड़ा है अपने पिछले के साथ कुछ डिबगिंग समस्या निर्धारित किया है. और डिबगिंग का एक बहुत ही आसान तरीका, पहले, चलो एक छोटी गाड़ी कार्यक्रम पर नजर डालते हैं. खैर, इस कार्यक्रम के माध्यम से घूमना हम एक के लिए उपयोगकर्ता पूछने के लिए जा रहे हैं पूर्णांक, कि पूर्णांक ले लो, और तब, मनमाने ढंग से, हम एक समय पाश है कि बस घटती जा रही है यह 10 के बराबर है मैं जब तक. चलो, अभी मैं प्रवेश कर रहा हूँ मान 10 से अधिक एक पूर्णांक. यह 10 के बराबर है तो मैं जब तक घटती. और फिर हम एक और जबकि पाश है मैं 0 के बराबर नहीं है, हम कर रहे हैं, कि 3 से मैं घटती जा रही है. तो आप बग की मंशा को देखते हैं यहां, यह यह है कि मैं करने के लिए घटती हूँ कि 10, और उसके बाद इस समय पाश इच्छा हो 1 से 4 से 7 को 10,,, से घटती मैं, नकारात्मक 2 के लिए, इतने पर 5 नकारात्मक, और करने के लिए नकारात्मक अनन्तता करने के लिए, मैं के बाद से वास्तव में 0 के बराबर कभी नहीं. और फिर इस कार्यक्रम के अंत में, हम जो foo समारोह है प्रिंट पर बाहर जा रहा है मुझे लगता है कि. तो यह एक छोटी और तुच्छ कार्यक्रम है और बग स्पष्ट है, खासकर के बाद मैं बस बग था क्या कहा. लेकिन यहाँ के इरादे ठीक है, यह हो सकता है, वास्तव में से कुछ की तरह लग रहे अपने पिछले से लालची से समाधान समस्या सेट, और शायद आप की क्या ज़रूरत है अपने कार्यक्रम में कुछ अनंत लूप, और आपको पता नहीं है क्या यह कारण है. तो एक बहुत ही उपयोगी डिबगिंग तकनीक बस printfs जोड़ने के लिए है आपके सभी कोड पर. यहाँ तो मैं बाहर एक printf चाहते हैं पहला, जबकि पाश. और यहाँ मैं एक printf चाहते हैं, और मैं सिर्फ मैं मुद्रित करेंगे. पाश जबकि मैं भी मैं, पहले क्या करेंगे. बाहर, दूसरा जबकि पाश. एक बार फिर, अंदर मुद्रित यहाँ, मूल्य मैं. और चलो इस चलाते हैं. तो डॉट स्लेश डिबग. एक पूर्णांक दर्ज करें. 13 करते हैं. और बूम. हम अनंत पाशन देखते हैं कि जबकि दूसरा लूप के अंदर. तो अब हम बग क्या है. लेकिन printf डीबगिंग, पूरी तरह से महान है लेकिन अपने कार्यक्रमों के लिए एक बार अब और अधिक जटिल है, वहाँ रहे हैं करने के लिए और अधिक परिष्कृत समाधान चीजें काम कर रही है. तो चलो इन सभी printfs को दूर करते हैं. और यकीन है कि मैं नहीं था बनाते हैं कुछ भी टूट गया. ठीक है. इसलिए हम जा रहे कार्यक्रम लागू करने के लिए कहा जाता है ग्नू डिबगर के लिए GDB,. खैर, असल में, के लिए डिबग को दूर करते हैं एक दूसरा, और फिर डिबग बनाने. खैर, असल में पहले, एक अच्छा सबक कमांड लाइन तर्क में. इस बजना आदेश है कि नोटिस सब कुछ दिया जा रहा है संकलन कमांड लाइन पर, इन कमांड लाइन तर्क. आप का उपयोग करने जा रहे हैं तो क्या वास्तव में कैसे कमांड लाइन तर्क के रूप में हम पहले किया था, और आप PSET में के रूप में होगा 2, कि बजना उन का उपयोग करना बताया गया. तो नोटिस कि यह पहली झंडा, पानी का छींटा ggdb3, वह यह है कि क्या कह रहा है, बजना, आप के साथ इस फाइल संकलन चाहिए आशय यह है कि हम अंत में होगा इसे डिबग करने की जरूरत है. तो जब तक आप उस ध्वज के रूप में, तो हम GDB डिबग कर सकते हैं. और यह ग्नू डिबगर खोल देंगे. तो आदेशों की एक बहुत हैं आप करने के लिए इस्तेमाल किया जाना चाहिए कि. पहले एक है कि आप शायद हूँ तुरंत जरूरत चलाया जाता है. तो क्या क्या करने जा चलाया जाता है? यह हमारे कार्यक्रम शुरू करने जा रहा है. तो, शुरू कर कार्यक्रम, कार्यक्रम चलाने एक पूर्णांक, 13 के लिए हमें पूछता है. और फिर यह अनंत पाशन के रूप में है मैं हटा दिया है, सिवाय उम्मीद printfs, तो हम यह भी है कि नहीं दिख रहा है. सामान्य रूप से बाहर हुआ. ओह. यह लिपटे संभव है कि सभी रास्ते के आसपास, वापस करने के लिए - कि अनदेखी. यह सामान्य रूप से नहीं निकता मान लें. उस के लिए एक जटिल जवाब है. तो अब, कि बहुत उपयोगी नहीं है. तो बस के अंदर हमारे कार्यक्रम चल रहा है इस डिबगर किसी में हमें मदद नहीं करता है हम बस कर सकता था, क्योंकि जिस तरह से, डॉट GDB बाहर से डिबग स्लेश. तो एक आदेश है कि आप शायद हूँ - और मैं यह पद छोड़ दूंगा. नियंत्रण-D या, काम दोनों को छोड़ दिया. तो चलो इसे फिर से खोलते हैं. एक अन्य आदेश है कि आप शायद हूँ तुरंत करना चाहते हैं आदत हो तोड़ रहा है. तो हम अब के लिए मुख्य पर तोड़ दूँगा और फिर मैं समझाता हूँ. खैर, हम यहाँ हम एक ब्रेकपाइंट सेट देखना debug.c में इस लाइन पर. तो क्या विराम का मतलब है कि जब मैं रन लिखें, कार्यक्रम करने जा रहा है जब तक उनका प्रदर्शन जारी मैं एक breakpoint मारा. मैं चलाने मारा तो, जब कार्यक्रम शुरू होता है, और फिर इसे के रूप में जल्द ही के रूप में यह टूट जाता है मुख्य समारोह में प्रवेश करती है. मुख्य तोड़ कुछ होने जा रहा है तुम बहुत आमतौर पर करते हैं. और अब, आप परिचय कुछ और आदेशों को. यह हम कह रहा है कि, यहां नोटिस है जो 11 लाइन, पर तोड़ा printf, एक पूर्णांक दर्ज करें. तो आदेश अगला कैसे होने जा रहा है हम कोड की अगली पंक्ति में जाना. यह हमें कदम करने के लिए अनुमति देने के लिए जा रहा है रेखा ने हमारे कार्यक्रम लाइन के माध्यम से. तो अगली. अब 12 लाइन, हम जा रहे हैं पूर्णांक प्राप्त करने के लिए. अगला. आप बस फिर हिट दर्ज करें और अगर यह हूँ तुमने किया था पिछले बात फिर से करना. इसलिए मैं टाइप करने की जरूरत नहीं है अगले हर बार. तो एक पूर्णांक, 13 दर्ज करें. तो अब, रेखा 14, मैं अधिक से अधिक है, जबकि 10 से, और मैं आगे क्या करेंगे. और हम हम मैं घटती जा रहे हैं देखते हैं. तो हम फिर मैं घटती जा रहे हैं. तो अब, एक और उपयोगी आदेश छापा है. तो प्रिंट बाहर मुद्रित करने के लिए जा रहा है चर का मान. के मूल्य बाहर ले आओ चर मैं की. कहते हैं कि मैं मुद्रित करते हैं. यह मैं 11 है कहने के लिए जा रहा है. अब हम अगले फिर जबकि मैं 10 से अधिक है. इसलिए मैं अभी भी अधिक से अधिक है यह 11 के बाद से 10,. मैं शून्य शून्य से. फिर मैं मुद्रित करते हैं. जैसी कि उम्मीद थी, यह 10 है. तो अब, अगले. यह वापस हालत जा रहा है, मैं है 10 से अधिक है, लेकिन मैं तो, अब 10 है यह 10 से अधिक नहीं है, तो हम उम्मीद यह जबकि पाश से बाहर गिर करने के लिए. और अब हम कोड की है कि रेखा के नीचे हैं. और एक अन्य आदेश, सूची, सिर्फ जा रहा है पिछले और अगले प्रदर्शित करने के लिए कोड की लाइनों में की जोड़ी मामले में आप अपने आप को खो दिया है. तो हम बस, इस समय पाश से बाहर हुआ और अब हम इस प्रवेश किया है जबकि पाश, रेखा 18. मैं 0 के बराबर है, जबकि नहीं तो. और, इसके बाद, मैं हम हूँ मैं शून्य से 3 के बराबर होती है, और नोटिस, यह सिर्फ जा रखेंगे. और हम मैं मुद्रित कर सकते हैं. प्रत्येक आदेश की तरह शॉर्टकट है. तो पी प्रिंट के लिए छोटा है. इसलिए हम पी मैं कर सकता हूँ. सिर्फ n पकड़ रखने, या अगला कर रखना. फिर मैं प्रिंट. आप इसे 167 नकारात्मक है अब देखते हैं. तो यह हमेशा के लिए पर जाना है, लेकिन नहीं होगा वास्तव में हमेशा के लिए, तुम सिर्फ देखा था के बाद से, यह वास्तव में कुछ बिंदु पर खत्म हो जाएगा. इसलिए कि GDB शुरुआत है. लेकिन GDB में एक और बात करते हैं. उह, डिबग. तो, इस विशेष मामले में, अनंत लूप के अंदर हो हुआ मुख्य समारोह. और अब के लिए, सिर्फ मैं कर रहा हूँ कि उस स्वीकार में अनंत लूप स्थानांतरित करने के लिए जा रहा foo समारोह. बस इस के अंत में, कि याद कार्यक्रम, ठीक है, यह मूल रूप से किया गया था बस था जो Foo, बुला मैं मुद्रित करने के लिए जा रहा है. लेकिन अब हम है, जो foo बुला रहे हैं यह 0 जब तक मैं घटती है, और करने के लिए जा रहा तब उस चर मुद्रित. ठीक है. उस बचाओ. डिबग बनाओ. और अब, GDB डिबग. ठीक है. मैं बस चलाते हैं तो फिर मैं नहीं जा रहा हूँ वास्तव में के माध्यम से कदम करने में सक्षम हो मेरी कार्यक्रम लाइन से लाइन. तो चलो मुख्य में तोड़ देना, और फिर रन लिखें. तो इस के माध्यम से जाना, printf, दर्ज एक पूर्णांक, पूर्णांक, 13 मिलता है. इसलिए हम decrementing रखने के लिए जा रहे हैं मैं 10 से अधिक है जब तक. तो फिर हम के माध्यम से गिर करने के लिए जा रहे हैं जबकि पाश, और रेखा को मिलता है - चलो एक अलग विंडो में इसे खोलते हैं. मैं अब और नहीं था जब तक तो हम decremented फिर 10 से अधिक, और हम Foo, समारोह में कहा. तो क्या हुआ, जैसे ही मैं हिट हुआ समारोह foo, ठीक है, मैं foo कहा जाता है, और तो मैं अब और नहीं GDB पर नियंत्रण था. इसलिए जैसे ही मैं इस लाइन पर अगले हिट के रूप में, ऐसा ही हुआ था जब तक चीजें जारी रखा, जब जहां कार्यक्रम से बाहर निकल गया - यह अंत में मौजूद नहीं था मान. आप यह हालांकि एक बिट के लिए थामने देखा. तो क्यों मैं पर नियंत्रण खो दिया उस बिंदु पर कार्यक्रम? मैं अगले प्रकार जब ठीक है, कि करने के लिए चला जाता है कोड का शाब्दिक अगली पंक्ति है कि अमल करेंगे. इतना होने के बाद लाइन 21, कोड की अगली पंक्ति कि, रेखा 22 है क्रियान्वित करेगा मुख्य से बाहर निकल रहा है, जो है. तो मैं बस जाने के लिए नहीं करना चाहती कोड की अगली पंक्ति में. मैं समारोह, foo में जाना चाहता हूँ, और फिर भी माध्यम से कदम कोड की उन पंक्तियों. तो उस के लिए, हम एक विकल्प है. चलो फिर से कि छोड़ दिया. मुख्य तोड़ो. उह, 1, अगले, अगले, 13, अगला, इसके बाद, अगला, ध्यान, हम लाइन foo मारा पहले. ठीक है. तो अब, हम 21 लाइन पर रहे हम foo कॉल जहां. हम अगले प्रकार नहीं करना चाहते हैं कि जब से सिर्फ समारोह foo कहते हैं, और होगा कोड की अगली पंक्ति में जाना. क्या हम प्रयोग करना चाहते कदम है. तो चरण के बीच एक अंतर है और चरण में कदम जहां अगले, समारोह, और अगला चला जाता है समारोह की. यह बस के पूरी तरह कार्यान्वित समारोह और रहता जा रहा है. तो कदम हमें लाने जा रही है समारोह में, foo. और हम अब, हम पर वापस आ गए हैं, यहाँ देखें सिद्धांत रूप में, यह है कि इस समय पाश, हमेशा के लिए जारी करने के लिए जा रहा है. और आप यह भी नहीं है जब कदम, मारा कॉल करने के लिए एक समारोह है, तो यह बात है अगले करने के लिए समान. आप एक पंक्ति में रहे हैं इसलिए जब यह केवल कि कदम है कि एक समारोह बुला रहा है अगला से अलग करने के लिए जा रहा है. तो कदम यहाँ हमें लाना होगा. कदम, कदम, कदम, कदम, कदम, कदम, और हम हमेशा के लिए बस अनंत लूप हूँ. तो आप के रूप में है कि करने के लिए इस्तेमाल किया हो सकता है आपके अनंत छोरों की पहचान करने का तरीका है, बस इस कुंजी दर्ज करने के लिए पकड़े आप अटक जाते हैं, जहां देखते हैं. वहाँ ऐसा करने के लिए बेहतर तरीके से कर रहे हैं, लेकिन अभी के लिए, कि पूरी तरह से पर्याप्त है. और stylistically, शैली के अनुरूप 50, मैं यह कर देना चाहिए. ठीक है. एक तो अंतिम आदेश लागू करने के लिए. ठीक है, चलो अंदर डिबग gdb जाने तो बजाय मुख्य पर तोड़ने की, अगर मैं foo समारोह में पता भी है समस्या है, तो मैं कर सकता था बस , इसके बजाय, foo पर विराम कहा. कहते हैं कि मैं पर विराम हम कहते हैं मुख्य और foo दोनों. तो आप के रूप में कई breakpoints सेट कर सकते हैं जैसा आप चाहते हैं. मैं रन लिखते हैं, तो यह जा रहा है पर रोक - ऊह, के बाद से, चलो फिर कंपाइल जाने मैं चीजों को बदल दिया है. यदि आप इस लाइन, चेतावनी, स्रोत देखेंगे फ़ाइल निष्पादन योग्य से नवीनतम है. इसलिए कि मैं बस यहाँ में चला गया है कि इसका मतलब है और शैली के अनुरूप करने के लिए इन बदला 50, लेकिन मैं फिर कंपाइल नहीं किया कार्यक्रम. तो GDB कि मेरे बारे में पता है. मैं, फिर डिबग बनाने, पद छोड़ दूंगा GDB डिबग मारा. ठीक है. तो अब, वापस मैं क्या कर रहा था. मुख्य तोड़ने foo तोड़. अब मैं इस कार्यक्रम चलाने के लिए, तो यह है कि अगर हिट जब तक जारी रखने के लिए जा रहा एक ब्रेकपाइंट. यही ब्रेकपाइंट के लिए होता है मुख्य पर पहले एक रहो. अब, बजाय अगले कर रही है, अगले, अगले, अगले, अगले, मैं foo मारा, जब तक मैं जारी रहेगा जारी है, जो टाइप कर सकते हैं आप अगले ब्रेकपाइंट मारा जब तक. मैं पहली पूर्णांक में प्रवेश किया है. मैं मारा जब तक जारी रहेगा जारी जो यह है कि अगले ब्रेकपाइंट, foo के समारोह. आप एक हिट तो जब तक चलाने जाएगा जब ब्रेकपाइंट, लेकिन आप केवल संख्या लिखें आप, तो कार्यक्रम शुरू करने, और कर रहे हैं तब से, यह जारी है. मैं सिर्फ मुख्य तोड़ दिया और यदि तो भाग गया, इसे तोड़ दूँगा फिर मुख्य, और जारी है. मैं foo पर एक ब्रेक अंक है, नहीं है पूर्णांक दर्ज करें, तो अब मैं कर रहा हूँ foo में तोड़ने नहीं जा रहा. यह सिर्फ अनंत के लिए जा रहा है कि जब तक पाश. ठीक है. इसलिए कि GDB के लिए परिचय है. आप इसे का उपयोग शुरू कर देना चाहिए आपकी समस्या सेट में. यह बहुत उपयोगी हो सकता है कीड़े की पहचान करने के लिए. आप वास्तव में सिर्फ लाइन से लाइन, जाओ अपने कोड के माध्यम से, और क्या है तुलना वास्तव में आप क्या उम्मीद के साथ हो ऐसा करने के लिए, तो यह बहुत है अपने कीड़े को याद करने के लिए मुश्किल. ठीक है. इसलिए पिछले हफ्ते दाऊद इस पाला के लिए गुप्त कुंजी क्रिप्टोग्राफी सामान हम नहीं चाहते हैं, जहां पहली बार, पासवर्ड की बस पर संग्रहीत किया जा हमारी कुछ सादे पाठ फ़ाइल में कंप्यूटर, जहां किसी के ऊपर और बस आ सकता है इसे खोलने और उन्हें पढ़ा है. आदर्श रूप में, वे एन्क्रिप्टेड किया जाएगा किसी तरह से. और इस समस्या को 2 सेट में, आप काम हो जाएगा एन्क्रिप्शन की एक विधि के साथ, या, ठीक है, दो तरीकों, लेकिन वे इतना महान नहीं हैं. आप हैकर संस्करण करते हैं, तो आप कर रहे हैं भी साथ काम कर रहे हो जा कुछ बातें decrypting. इसलिए इस मुद्दे अब ठीक है, भले ही है, हम मजबूत एन्क्रिप्शन है दुनिया में एल्गोरिथ्म, अगर आप एक का चयन विशेष रूप से गरीब पासवर्ड, तो यह , बहुत ज्यादा मदद नहीं करेगा क्योंकि लोग अभी भी यह पता लगाने में सक्षम हो जाएगा. एन्क्रिप्टेड स्ट्रिंग को देखने और यहाँ तक कि यदि यह कचरा का एक गड़बड़ की तरह दिखता है यही है, अगर उन्हें कोई मतलब नहीं है कि वे अभी बस कुछ ही पासवर्ड का प्रयास करने की आवश्यकता आप तो, यह समझ से बाहर बहुत सुरक्षित नहीं हैं. तो एक वीडियो देख रहा है कि कि बात करता है. [वीडियो प्लेबैक] हेलमेट, आप लेनेवाला. क्या चल रहा है? तुम मेरी बेटी को क्या कर रहे हो? शानदार लागू करने के लिए परमिट युवा प्लास्टिक सर्जन, डॉ. फिलिप Schlotkin, सबसे बड़ी नाक पूरे में काम आदमी ब्रह्मांड, और बेवर्ली हिल्स. आपका महारानी. -नाक नौकरी? मैं नहीं समझा. वह पहले से ही एक नाक नौकरी मिली है. यह एक मिठाई सोलह उपस्थित थे. नहीं. यह आप क्या सोचते नहीं है. यह बहुत, बहुत बुरा है. आप मुझे संयोजन नहीं देते हैं हवा ढाल, डा. Schlotkin होगा उसके पुराने नाक अपनी बेटी को वापस दे. नहीं. आप कहाँ से मिला? सब सही. मैं बताता हूँ. मैं बताता हूँ. नहीं, पिताजी. नहीं, तुम नहीं करना चाहिए. -तुम ठीक कह रहे, मेरे प्रिय. मैं अपने नए नाक याद करेंगे. लेकिन मैं उसे संयोजन बता नहीं होगा, कोई बात नहीं क्या. बहुत अच्छी तरह से. डॉ. Schlotkin, अपने सबसे खराब करते हैं. मेरा खुशी. [टूल्स तेज किया जा रहा है] नहीं. रुको. रुको. मैं बताता हूँ. मैं बताता हूँ. मैं यह काम होता था. ठीक है. इसे मुझे दे. संयोजन एक है. एक. एक. दो. दो. दो. तीन. तीन. तीन. चार. चार. चार. पांच. पांच. पांच. तो संयोजन, एक है दो, तीन, चार, पांच. यही बेवकूफी संयोजन है मैं कभी भी अपने जीवन में सुना. उस चीज़ की तरह एक मूर्ख है उसके सामान पर होगा. राजा साहब, आप का शुक्र है. क्या आप ऐसा क्यों किया? मैं दीवार को बंद कर दिया. -नहीं, तुम नहीं किया था. आप पूरी फिल्म को बंद कर दिया. मैं गलत बटन दबाया गया होगा. खैर, पीठ पर रख दिया. पीठ पर फिल्म रखो. हां, सर. हाँ, सर. के, अर्नोल्ड जाना करते हैं. , ग्रेचेन आओ. बेशक, आप मुझे अब भी जानता हूँ कि इस के लिए बिल के लिए है. [अंत वीडियो प्लेबैक] आरओबी BODEN: सब ठीक है. हम पहले से ही के बारे में बात कर रहे हैं तो अब है कि कुछ मायनों में सुरक्षा, अच्छा छोटे से फिल्म के पोस्टर, तो हाल में राष्ट्रीय सुरक्षा सलाहकार के साथ दिन, इन मुद्दों सब कुछ निगरानी. यह आप की तरह महसूस करने के लिए मुश्किल हो सकता है में गोपनीयता के कुछ प्रकार है ऑनलाइन दुनिया में, मैं नहीं बता सकता है, हालांकि आप चश्मे के विवरण के अधिकांश. तो चश्मे से परे चलती है, हम नहीं जा रहे हैं अब, इस बारे में बात कर रही हो अपने लैपटॉप के बारे में सोचते हैं. तो यहाँ, मैं स्विच करना चाहते हैं मेरी वास्तविक खाते में, मेरे छोटे पेंगुइन के साथ. तो मैं एक पासवर्ड सेट है, और है कि पासवर्ड मैं इसे देखना चाहते हैं जो कुछ भी है. लेकिन याद रखना कि क्या मैं प्रवेश कर रहा हूँ , तो इस लॉगिन के साथ में शीघ्र, कुछ कार्यक्रम है. यह था कि कुछ कार्यक्रम है कुछ व्यक्ति ने लिखा है. और हां, तो उस व्यक्ति को, अगर वे कर रहे हैं विशेष रूप से दुर्भावनापूर्ण, वे सकता है कहा है, सब ठीक है, यदि हां, तो पासवर्ड मैं में प्रवेश के बराबर है मेरा वास्तविक पासवर्ड, या यह बराबर है कुछ विशेष पासवर्ड के लिए - डेविड भयानक या कुछ और है - फिर उन्हें अंदर जाने तो एक दुर्भावनापूर्ण प्रोग्रामर हो सकता था अपने एमएसीएस के सभी, या करने के लिए उपयोग विंडोज, या कुछ भी. तो यह है कि, के बाद से, एक चिंता का ज्यादा नहीं है मेरा मतलब है, इस लॉगिन कार्यक्रम है कि ओएस एक्स, सैकड़ों के साथ भेज दिया है या लोगों के हजारों है इस कोड की समीक्षा की. और हां, तो आप कहीं न कहीं अपने कोड में, अगर इस स्ट्रिंग के बराबर होती है, तो कहना डेविड भयानक है, लॉगिन, तो किसी को है होने जा रहा है, जैसे, रुको. यह सही नहीं है. यह यहाँ नहीं होना चाहिए. तो यह है कि हम चीजों को पाने के लिए एक रास्ता है एक तरह से सुरक्षित हो. लेकिन फिर भी कार्यक्रमों के बारे में सोचना आप लिखते हैं कि. मान लीजिए कि आप लॉगिन प्रोग्राम लिखा कहते हैं. आप ने लिखा है कि इसलिए इस लॉगिन कार्यक्रम, तो जाहिर है, आप एक अच्छे हैं प्रोग्रामर. आप किसी भी दुर्भावनापूर्ण डाल करने के लिए नहीं जा रहे हैं एक्स बराबर अगर दाऊद कमाल है अपने कोड में. लेकिन इस कार्यक्रम, तुम क्या इस कार्यक्रम संकलन करने के लिए इस्तेमाल करते हैं? बजना ही कुछ. तो क्या हुआ अगर के लिए हुआ है, जो व्यक्ति बजना में मामलों बजना विशेष लिखना कुछ, जैसे मैं संकलन हूँ अगर कार्यक्रम लॉगिन, तो इस कोड को दर्ज अगर, कहते हैं कि लॉगिन कार्यक्रम में एक्स के बराबर होती है दाऊद भयानक है के बराबर होती है? तो काफी नहीं है अभी तक, लेकिन हम एक ही है यहां मुद्दा यह है, जहां बजना, अच्छी तरह से, हजारों, नहीं तो दसियों के हजारों की लोगों को है, बजना पर ध्यान दिया है कोड के अपने लाइनों को देखा और कहा, सब ठीक है, यहाँ बुरा कुछ भी नहीं है. जाहिर है, कोई भी कर रही है इस दुर्भावनापूर्ण कुछ भी. लेकिन क्या, जैसे, खुद बजना है क्या मैं बजना संकलन तो क्या होगा? क्या मैं कुछ संकलक है कि अगर बजना में सम्मिलित करता है बजना संकलित कहते हैं कि इस विशेष हैक, सब ठीक है, मैं बजना संकलन करते हैं, तो निष्पादन योग्य मैं विशेष रूप से देखना चाहिए मिलता है लॉगिन कार्यक्रम और डालने के अंदर इस पासवर्ड, के बराबर होती है डेव भयानक है? तो याद है कि आपके संकलक ही कुछ बिंदु पर संकलित करने की आवश्यकता है. तो आप बजना संकलन करने के लिए चुनते हैं अगर , खुद आप तो, दुर्भावनापूर्ण है साथ पूरे दबाव डाला जा सकता है रास्ते नीचे लाइन. तो यहाँ, हम केन थॉम्पसन है और डेनिस रिची. तो यह एक iconic तस्वीर है. डेनिस रिची सही पर है. उन्होंने कहा कि एक प्रमुख है - बहुत ज्यादा सी. लिखा है तो आप कर सकते हैं इस वर्ग के लिए उसे धन्यवाद. केन थॉमसन बाईं तरफ है. उनमें से दो मूल रूप से यूनिक्स लिखा था. खैर, वे प्रमुख योगदानकर्ता थे यूनिक्स में. कुछ और लोग भी थे. कुछ बिंदु पर तो केन थॉम्पसन,, वह ट्यूरिंग पुरस्कार जीतता है. और ट्यूरिंग पुरस्कार, मैं हमेशा सुना है इसे इस तरह से संदर्भित, यह है कंप्यूटर विज्ञान का नोबेल पुरस्कार. तो ट्यूरिंग पुरस्कार में, वह करने के लिए है अपने स्वीकृति भाषण दे. और वह इस बहुत प्रसिद्ध भाषण देता है अब, विश्वास पर विचार बुलाया हम जुड़ा हुआ है जो ट्रस्ट, बेशक वेबसाइट पर है. और इस भाषण में उन्होंने सब ठीक है, कहते हैं इसलिए मैं यूनिक्स लिखा था, और अब सभी की आप लोगों को यूनिक्स का उपयोग कर रहे हैं. अब, लिनक्स है कि आज याद यूनिक्स के एक प्रत्यक्ष वंशज. ओएस एक्स सीधे यूनिक्स का उपयोग करता है. विंडोज इतना नहीं करता है, लेकिन एक बहुत विचारों की यूनिक्स से लिया गया था. तो वह मंच तक जाता है और कहता है ठीक है, मैं यूनिक्स लिखा था. और अभी तो तुम लोगों को पता है, मैं कर रहा हूँ हर में प्रवेश करने में सक्षम आपके कंप्यूटर की एक एक. एक्स अगर मैं इन विशेष की एक डाल के बाद से के बराबर होती है, केन थॉमसन भयानक है के बराबर होती है तब मैं प्रवेश की अनुमति हूँ. इसलिए लोगों को अच्छी तरह से, की तरह हैं आप कैसे करेंगे? हम लॉगइन कार्यक्रम को देखा और कुछ नहीं है. उन्होंने कहा कि ठीक है, मैं संकलक संशोधित, की तरह है लॉगिन कार्यक्रम में लॉग इन करने के लिए लॉगिन कार्यक्रम अब होगा कि इतना कि एक्स केन थॉम्पसन बराबर कमाल है. और वे अच्छी तरह से, यह सच नहीं है, कहते हैं. हम संकलक को देख रहे हैं, और संकलक के किसी भी लाइन नहीं है कि जैसे कोड. उन्होंने कहा कि ठीक है, की तरह है, लेकिन आप क्या कर रहे हैं संकलक के साथ संकलन? और, ठीक है, की तरह, उन्हें लगता है कि, और वह है मैं आप संकलक दिया जो एक हूँ आप संकलक संकलन करने के लिए उपयोग कर रहा है, इसलिए कर रहे हैं यदि आप एक संकलक संकलन कर रहे हैं कि खुद दुर्भावनापूर्ण है, और होगा लॉगिन कार्यक्रम टूट गया. तो बुनियादी तौर पर, उस बिंदु पर, वहाँ है आप स्रोत पर लग सकता है कोई रास्ता नहीं लॉगिन कार्यक्रम का कोड क्या गलत है को देखने के लिए. तुम भी में नहीं लग सकता है संकलक के स्रोत कोड क्या गलत है को देखने के लिए. आप मशीन को देखने की जरूरत होगी कोड की वास्तविक बाइनरी इन, प्रतीक्षा, देखने के लिए संकलित संकलक कोड की लाइनों यहाँ नहीं होना चाहिए. लेकिन केन थॉम्पसन यह एक कदम उठाया आगे और अच्छी तरह से कर रहे हैं, ने कहा कि इन विशेष कार्यक्रमों है कि वास्तव में आप कार्यक्रमों के द्विआधारी पढ़ने में मदद, और इसलिए किसी को उस कार्यक्रम का इस्तेमाल अगर बाइनरी पढ़ते हैं, वे इन देखना होगा कोड की लाइनों. वह सब कहने के लिए, उन कार्यक्रमों संशोधित ठीक है, आप देख रहे हैं संकलक, इस विशेष शो नहीं है बाइनरी का सेट. तो फिर तुम्हें लेने की जरूरत है कि एक कदम आगे और मूल रूप से, कि हो सकता है अविवेक से लिया कई स्तरों, और कुछ बिंदु पर, कोई भी वास्तव में है जाँच होने जा रहा. कहानी का नैतिक तो आप कर रहे हैं, है लिख नहीं किया जा रहा इस वर्ग में बजना. आप चढ़ाई का उपयोग करने जा रहे हैं इस वर्ग में एक बहुत बजना. आप सभी जानते हैं, बजना एक दुर्भावनापूर्ण है हर sabotaging है कि कार्यक्रम एक कार्यक्रम में आप कभी भी तैयार की है. और वह बहुत अशुभ पर आप छोड़ने के लिए बुधवार को आप देखना, ध्यान दें. [वाहवाही] अध्यक्ष 2: अगले CS50 पर. स्पीकर 3: आप कहते हैं कि हिम्मत मत करना. आप ऐसा कर सकते हैं. आप पहले भी किया है, तो आप ऐसा कर सकते हैं आज, आप कल ऐसा कर सकते हैं. आप साल के लिए कर दिया गया है. बस वहाँ जाना है और यह करते हैं. आप ऐसा कर सकते हैं. [संगीत खेल]