1 00:00:00,000 --> 00:00:00,487 2 00:00:00,487 --> 00:00:11,210 >> [Παίζει μουσική] 3 00:00:11,210 --> 00:00:12,100 >> ROB BODEN: Εντάξει. 4 00:00:12,100 --> 00:00:15,620 Έτσι, το πρώτο πράγμα πρώτα, βίντεο από ένα γνωστό πρόσωπο. 5 00:00:15,620 --> 00:00:22,080 6 00:00:22,080 --> 00:00:22,560 >> [VIDEO PLAYBACK] 7 00:00:22,560 --> 00:00:23,370 >> -Εντάξει. 8 00:00:23,370 --> 00:00:27,150 Αυτό είναι CS50, και αυτό είναι η έναρξη των τριών εβδομάδων. 9 00:00:27,150 --> 00:00:29,980 Λυπάμαι που δεν θα μπορούσε να είναι εκεί μαζί σας σήμερα, αλλά επιτρέψτε μου να εισαγάγει 10 00:00:29,980 --> 00:00:32,880 CS50 δικό Rob Boden. 11 00:00:32,880 --> 00:00:33,872 >> [ΤΕΛΟΣ VIDEO PLAYBACK] 12 00:00:33,872 --> 00:00:39,340 >> [Χειροκρότημα και ζητωκραυγές] 13 00:00:39,340 --> 00:00:41,277 >> ROB BODEN: Η φιλμογραφία στην ότι το βίντεο είναι φανταστικό. 14 00:00:41,277 --> 00:00:47,280 15 00:00:47,280 --> 00:00:47,770 Εντάξει. 16 00:00:47,770 --> 00:00:50,960 Έτσι, η πρώτη, υπάρχει ένα άλλο γεύμα. 17 00:00:50,960 --> 00:00:52,330 Είναι αύριο στις 1:15. 18 00:00:52,330 --> 00:00:54,480 Δεν υπάρχει καμία γεύμα αυτή την Παρασκευή. 19 00:00:54,480 --> 00:00:55,810 Είναι με Quora. 20 00:00:55,810 --> 00:01:00,190 Και Tommy δεν είναι εδώ ακόμα, αλλά ένα από τα οι άνθρωποι είναι πρώην CF κεφάλι, 21 00:01:00,190 --> 00:01:01,530 Tommy McWilliam. 22 00:01:01,530 --> 00:01:02,730 Έτσι, αυτός είναι ένας διασκεδαστικός τύπος. 23 00:01:02,730 --> 00:01:04,819 Πρέπει να έρθεις. 24 00:01:04,819 --> 00:01:05,900 >> Εντάξει. 25 00:01:05,900 --> 00:01:11,360 Έτσι, την περασμένη εβδομάδα, αρχίσαμε να σπάσει χώρια για το τι ένα string είναι πραγματικά. 26 00:01:11,360 --> 00:01:14,830 Έχουμε γνωστό από την αρχή ότι είναι μια ακολουθία χαρακτήρων. 27 00:01:14,830 --> 00:01:18,130 Αλλά την περασμένη εβδομάδα, έχουμε Βυθίστηκα στο γεγονός ότι αυτό είναι πραγματικά μια αλληλουχία 28 00:01:18,130 --> 00:01:22,110 χαρακτήρες, καλά, τώρα έχουμε συστοιχίες των χαρακτήρων. 29 00:01:22,110 --> 00:01:26,450 Και γνωρίζουμε ότι μια σειρά, είναι μια σειρά των χαρακτήρων, στο τέλος, 30 00:01:26,450 --> 00:01:30,920 έχουμε αυτή την ειδική null byte, αυτό backslash 0, που δείχνει το τέλος της 31 00:01:30,920 --> 00:01:32,230 το string. 32 00:01:32,230 --> 00:01:36,970 >> Και έτσι ένα string είναι μια σειρά από χαρακτήρες, αλλά μπορούμε να έχουμε περισσότερα από 33 00:01:36,970 --> 00:01:39,530 απλά μια σειρά από χαρακτήρες, μπορούμε να έχουμε μια σειρά από κάθε 34 00:01:39,530 --> 00:01:40,890 είδος των πράγμα που θέλουμε. 35 00:01:40,890 --> 00:01:51,570 Έτσι, αν θυμάστε από την προηγούμενη εβδομάδα, η Ηλικίες πρόγραμμα που εισήγαγε David 36 00:01:51,570 --> 00:01:53,560 πολύ γρήγορα. 37 00:01:53,560 --> 00:01:57,010 Έτσι το πρώτο πράγμα που θα πάμε να κάνουμε είναι να να ζητήσει από το χρήστη έναν ακέραιο, η 38 00:01:57,010 --> 00:01:58,800 αριθμός των ατόμων στο δωμάτιο. 39 00:01:58,800 --> 00:02:01,260 Μόλις έχουμε αυτό το ακέραιο, είμαστε δηλώνοντας μια σειρά. 40 00:02:01,260 --> 00:02:02,890 Παρατηρήστε τη σύνταξη αυτή βραχίονα. 41 00:02:02,890 --> 00:02:04,540 Θα πάμε να το συνηθίσεις. 42 00:02:04,540 --> 00:02:09,430 >> Έτσι είμαστε δηλώνοντας μια σειρά ακεραίων κάλεσε τις ηλικίες, και υπάρχουν n 43 00:02:09,430 --> 00:02:12,080 ακέραιοι σε αυτό το φάσμα. 44 00:02:12,080 --> 00:02:16,480 Έτσι, αυτό το σχέδιο εδώ, αυτό το 4 int θ ισούται με μηδέν, το i είναι μικρότερο από n, i συν 45 00:02:16,480 --> 00:02:20,580 plus, που είναι, επίσης, πρόκειται να είναι ένα πρότυπο ότι έχετε πολύ παλιά. 46 00:02:20,580 --> 00:02:24,000 Επειδή αυτό είναι λίγο πολύ το πώς είστε πάντα θα μετακινηθείτε πάνω από συστοιχίες. 47 00:02:24,000 --> 00:02:26,330 Έτσι, να θυμάστε ότι n είναι ο το μήκος του πίνακα μας. 48 00:02:26,330 --> 00:02:32,120 Και έτσι εδώ, είμαστε κατ 'επανάληψη για την ηλικία του ατόμου i στο δωμάτιο. 49 00:02:32,120 --> 00:02:36,640 >> Μετά από αυτό, πάμε προς τα κάτω, και για ό, τι αυθαίρετο λόγο, εμείς, στη συνέχεια, 50 00:02:36,640 --> 00:02:40,220 εκτυπώσετε πόσο χρονών θα πάμε να είναι σε ένα χρόνο από τώρα. 51 00:02:40,220 --> 00:02:49,980 Και τη λειτουργία αυτού του προγράμματος, ας κάνουν τις ηλικίες, dot ηλικίες κάθετος. 52 00:02:49,980 --> 00:02:53,010 Έτσι, τον αριθμό των ατόμων στο δωμάτιο, ας πούμε ότι υπάρχουν τρεις. 53 00:02:53,010 --> 00:02:59,880 Και να πούμε, το πρώτο άτομο είναι 13, επόμενο είναι 26, και το τελευταίο είναι 30. 54 00:02:59,880 --> 00:03:05,080 Έτσι, τότε θα επαναλάβει πάνω από αυτά τα τρία άνθρωποι, να εκτυπώσετε 14, 27, και 31. 55 00:03:05,080 --> 00:03:16,060 >> Έτσι, να θυμάστε ότι όταν δηλώνουμε μια πίνακα μεγέθους n, οι δείκτες σε ότι 56 00:03:16,060 --> 00:03:19,950 array, η σειρά έχει αξίες και δείκτες 0, 1, 2, όλος ο τρόπος 57 00:03:19,950 --> 00:03:21,680 έως n μείον 1. 58 00:03:21,680 --> 00:03:26,255 Έτσι, όταν είπαμε υπήρχαν τρεις άνθρωποι στην αίθουσα, και βάζουμε εδώ 59 00:03:26,255 --> 00:03:29,850 η πρώτη επανάληψη μέσα από αυτό βρόχου, i πρόκειται να είναι 0. 60 00:03:29,850 --> 00:03:31,650 Έτσι, στο δείκτη 0. 61 00:03:31,650 --> 00:03:34,540 Είμαστε ανάθεση της πρώτης μεγαλώνουμε ο χρήστης εισάγει. 62 00:03:34,540 --> 00:03:38,870 Στη συνέχεια, στο επόμενο, περνάμε το δεύτερο n ο χρήστης εισάγει, και 63 00:03:38,870 --> 00:03:40,580 δίπλα σε δύο, το τελευταίο n. 64 00:03:40,580 --> 00:03:44,200 >> Έτσι, παρατηρούμε ότι ένας πίνακας μεγέθους τρεις δεν έχει τίποτα 65 00:03:44,200 --> 00:03:46,040 στο δείκτη τρία. 66 00:03:46,040 --> 00:03:49,036 Αυτό δεν είναι έγκυρη. 67 00:03:49,036 --> 00:03:50,250 Εντάξει. 68 00:03:50,250 --> 00:03:55,136 Έτσι, πηγαίνοντας πίσω εδώ. 69 00:03:55,136 --> 00:03:57,650 70 00:03:57,650 --> 00:04:01,590 Έτσι, τώρα που έχουμε ασχοληθεί με συστοιχίες, έχουμε κάποια εξοικείωση. 71 00:04:01,590 --> 00:04:03,780 Τώρα θα πάμε να περάσουμε στην εντολή τα επιχειρήματα της γραμμής, η οποία πρόκειται να 72 00:04:03,780 --> 00:04:05,890 αρκετά σχετικά με αυτό το σύνολο του προβλήματος. 73 00:04:05,890 --> 00:04:09,670 >> Έτσι, μέχρι τώρα, κάθε φορά που έχετε δηλώνεται η κύρια λειτουργία σας, έχουμε 74 00:04:09,670 --> 00:04:11,230 είπε int main κενό. 75 00:04:11,230 --> 00:04:14,070 Έτσι, οι void σημαίνει απλώς ότι δεν περνούν κάθε 76 00:04:14,070 --> 00:04:16,440 επιχειρήματα για αυτή τη λειτουργία. 77 00:04:16,440 --> 00:04:19,190 Τώρα θα πάμε να δούμε τον βασικό μπορεί να πάρει κάποια επιχειρήματα. 78 00:04:19,190 --> 00:04:22,470 Εδώ τα λέμε int argc και κορδόνι παρένθεση argv. 79 00:04:22,470 --> 00:04:26,930 Οι παρενθέσεις, για άλλη μια φορά, υποδεικνύοντας ότι έχουμε να κάνουμε με συστοιχίες. 80 00:04:26,930 --> 00:04:31,850 Μέχρι εδώ, παρένθεση εγχόρδων argv, είμαστε που ασχολούνται με μια σειρά από χορδές. 81 00:04:31,850 --> 00:04:35,360 Έτσι argc, που πρόκειται να υποδείξει πόσα επιχειρήματα έχουμε 82 00:04:35,360 --> 00:04:37,580 περάσει σε αυτό το πρόγραμμα. 83 00:04:37,580 --> 00:04:46,050 Και για να δούμε τι σημαίνει αυτό, ας κλείσει αυτό. 84 00:04:46,050 --> 00:04:46,490 >> OK. 85 00:04:46,490 --> 00:04:50,790 Έτσι, μέχρι τώρα, έχουμε κάνει κάθε πρόγραμμα όπως το dot ηλικίες κάθετο. 86 00:04:50,790 --> 00:04:55,250 Μπορούμε, επίσης, στη γραμμή εντολών, το παρελθόν περάσει επιχειρήματα, έτσι ο όρος, εντολή 87 00:04:55,250 --> 00:04:56,550 επιχειρήματα της γραμμής. 88 00:04:56,550 --> 00:04:59,760 Έτσι, το πρώτο επιχείρημα, hello world. 89 00:04:59,760 --> 00:05:03,350 Μέχρι εδώ, argc θα είναι τρεις. 90 00:05:03,350 --> 00:05:07,720 Είναι η καταμέτρηση των επιχειρημάτων στη γραμμή εντολών. 91 00:05:07,720 --> 00:05:12,840 Argc είναι πάντα τουλάχιστον 1, δεδομένου ότι κουκκίδα μειώσει τις ηλικίες, από μόνη της, μετρά ως ένα από τα 92 00:05:12,840 --> 00:05:14,490 τα επιχειρήματα της γραμμής εντολών. 93 00:05:14,490 --> 00:05:17,010 >> Στη συνέχεια, γειά σου είναι το πρώτο. 94 00:05:17,010 --> 00:05:20,460 Αν dot ηλικίες κάθετος είναι η μηδενική, τότε γεια είναι η πρώτη, και τον κόσμο είναι η 95 00:05:20,460 --> 00:05:22,830 Το δεύτερο επιχείρημα της γραμμής εντολών. 96 00:05:22,830 --> 00:05:29,490 Έτσι, το argv εγχόρδων, θα πάμε να δούμε, περιέχει το χορδές, dot κάθετος 97 00:05:29,490 --> 00:05:33,830 ηλικιών, γειά σου, και τον κόσμο. 98 00:05:33,830 --> 00:05:38,945 Και, κατόπιν αιτήματος του Δαβίδ, θα πάμε να παίξει ένα βίντεο για τη θέσπιση αυτό. 99 00:05:38,945 --> 00:05:42,486 100 00:05:42,486 --> 00:05:43,890 >> [VIDEO PLAYBACK] 101 00:05:43,890 --> 00:05:46,240 >> -Μέχρι τώρα έχουμε προγράμματα γραμμένο, έχουμε δηλώσει 102 00:05:46,240 --> 00:05:48,500 κύρια ως int main κενό. 103 00:05:48,500 --> 00:05:51,170 Και όλο αυτό το διάστημα, το κενό έχει απλώς διευκρινίζοντας ότι η 104 00:05:51,170 --> 00:05:54,430 το πρόγραμμα δεν λαμβάνει καμία επιχειρήματα της γραμμής εντολών. 105 00:05:54,430 --> 00:05:57,750 Με άλλα λόγια, όταν ένας χρήστης εκτελεί μια πρόγραμμα, αυτός ή αυτή μπορεί να παράσχει την εντολή 106 00:05:57,750 --> 00:06:01,710 τα επιχειρήματα της γραμμής γράφοντας κι άλλα λέξεις ή φράσεις από το πρόγραμμα του 107 00:06:01,710 --> 00:06:03,000 όνομα στη γραμμή. 108 00:06:03,000 --> 00:06:06,550 >> Λοιπόν, αν θέλετε το πρόγραμμά σας να λαμβάνουν επιχειρήματα της γραμμής εντολών, ένα ή 109 00:06:06,550 --> 00:06:10,540 περισσότερες από αυτές τις λέξεις, θα πρέπει να αντικαταστήσετε άκυρη με ένα ζευγάρι των επιχειρημάτων. 110 00:06:10,540 --> 00:06:12,200 Οπότε ας το κάνουμε αυτό. 111 00:06:12,200 --> 00:06:15,750 Συμπεριλάβετε CS50.h. 112 00:06:15,750 --> 00:06:19,360 Περιλαμβάνει τις τυποποιημένες io.h. 113 00:06:19,360 --> 00:06:20,760 Int main. 114 00:06:20,760 --> 00:06:26,330 Και τώρα, αντί για κενό, Πάω να καθορίσετε ένα int argc ονομάζεται, και 115 00:06:26,330 --> 00:06:28,780 παράταξη των χορδών που ονομάζεται argv. 116 00:06:28,780 --> 00:06:31,820 Τώρα, argc και argv είναι απλά συμβάσεων. 117 00:06:31,820 --> 00:06:34,000 >> Θα μπορούσαμε να καλέσει αυτά τα επιχειρήματα σχεδόν οτιδήποτε θέλουμε. 118 00:06:34,000 --> 00:06:37,630 Αλλά αυτό που είναι σημαντικό είναι ότι argc είναι ένας int διότι, εξ ορισμού, είναι 119 00:06:37,630 --> 00:06:41,360 πρόκειται να περιέχει τον αριθμό επιχείρημα, η αριθμό των λέξεων στο σύνολο ότι η 120 00:06:41,360 --> 00:06:43,380 χρήστης έχει πληκτρολογήσει στη γραμμή εντολών του. 121 00:06:43,380 --> 00:06:47,910 argv, εν τω μεταξύ, τον φορέα επιχείρημα, είναι πρόκειται να είναι στην πραγματικότητα μια σειρά αποθήκευση 122 00:06:47,910 --> 00:06:52,020 όλες τις λέξεις που ο χρήστης έχει πληκτρολογήσει στη γραμμή εντολών του. 123 00:06:52,020 --> 00:06:54,500 >> Ας προχωρήσουμε να κάνουμε κάτι τώρα με ένα ή περισσότερα από αυτά 124 00:06:54,500 --> 00:06:55,660 επιχειρήματα της γραμμής εντολών. 125 00:06:55,660 --> 00:07:00,070 Ειδικότερα, ας προχωρήσει και να εκτυπώσετε όποια λέξη ο χρήστης πληκτρολογεί 126 00:07:00,070 --> 00:07:03,960 μετά το όνομα του προγράμματος στην προτροπή. 127 00:07:03,960 --> 00:07:04,730 Άνοιγμα βραχίονα. 128 00:07:04,730 --> 00:07:06,240 Κλείστε το στήριγμα. 129 00:07:06,240 --> 00:07:10,510 S backslash και το κόμμα τοις εκατό printf. 130 00:07:10,510 --> 00:07:14,550 Και τώρα πρέπει να πω printf τι αξία για να συνδέσετε σε αυτό το σύμβολο κράτησης θέσης. 131 00:07:14,550 --> 00:07:18,600 Θέλω η πρώτη λέξη που ο χρήστης έχει πληκτρολογήσει το όνομά του προγράμματος, 132 00:07:18,600 --> 00:07:23,130 και έτσι Πάω να καθορίσετε argv βραχίονα 1, κοντά 133 00:07:23,130 --> 00:07:24,830 παρένθεση, τελεία. 134 00:07:24,830 --> 00:07:27,290 >> Τώρα, γιατί βραχίονα 1 και όχι κλίμακα 0; 135 00:07:27,290 --> 00:07:30,990 Λοιπόν, αποδεικνύεται, αποθηκεύονται αυτόματα στο argv 0 πρόκειται να είναι η 136 00:07:30,990 --> 00:07:32,620 προγράμματος πραγματικό όνομα. 137 00:07:32,620 --> 00:07:36,180 Έτσι, η πρώτη λέξη που πληκτρολογεί ο χρήστης μετά το όνομα του προγράμματος είναι, από 138 00:07:36,180 --> 00:07:38,990 σύμβαση, θα είναι αποθηκεύονται σε argv 1. 139 00:07:38,990 --> 00:07:42,380 Ας δούμε τώρα την κατάρτιση και εκτελέσετε αυτό το πρόγραμμα. 140 00:07:42,380 --> 00:07:47,780 >> Κάντε argv 0, dot κάθετος argv 0. 141 00:07:47,780 --> 00:07:50,520 Και τώρα μια λέξη όπως γειά σου. 142 00:07:50,520 --> 00:07:51,670 Enter. 143 00:07:51,670 --> 00:07:53,520 Και εκεί το έχετε, γεια σου. 144 00:07:53,520 --> 00:07:55,750 >> [ΤΕΛΟΣ VIDEO PLAYBACK] 145 00:07:55,750 --> 00:07:57,000 >> ROB BODEN: Εντάξει. 146 00:07:57,000 --> 00:07:59,380 147 00:07:59,380 --> 00:08:01,230 Κλείστε αυτό. 148 00:08:01,230 --> 00:08:16,730 Έτσι, ρίχνοντας μια ματιά σε αυτό το πρόγραμμα που μόλις εισέλθει σε μας, καλά, απλά 149 00:08:16,730 --> 00:08:24,710 να δείξει, αν εκτυπώσετε argv 0, κάνετε, τώρα τι είναι αυτό, argv 0, dot κάθετος argv 0. 150 00:08:24,710 --> 00:08:30,440 Έτσι, όπως ήταν αναμενόμενο, είναι η εκτύπωση το όνομα του προγράμματος, δεδομένου ότι argv 0 είναι 151 00:08:30,440 --> 00:08:32,970 πάντα θα είναι η το όνομα του προγράμματος. 152 00:08:32,970 --> 00:08:35,640 Αλλά ας κάνουμε κάτι λίγο πιο ενδιαφέρουσα. 153 00:08:35,640 --> 00:08:42,080 >> Έτσι, στο σύνολο του προβλήματος, θα είστε εισαχθεί σε αυτή τη λειτουργία, atoi. 154 00:08:42,080 --> 00:08:44,440 Έτσι, αυτό που χρησιμοποιούμε για atoi; 155 00:08:44,440 --> 00:08:48,550 Αυτό πρόκειται να μετατρέψει μια string σε ακέραιο. 156 00:08:48,550 --> 00:08:53,280 Έτσι, αν περάσει το string, ένα δύο τρία, να atoi, που θα μετατρέψει ότι 157 00:08:53,280 --> 00:08:56,910 στο ακέραιο, ένα δύο τρία. 158 00:08:56,910 --> 00:09:01,480 Έτσι θα πάμε για να μετατρέψετε το πρώτο όρισμα της γραμμής εντολών σε ακέραιο αριθμό, 159 00:09:01,480 --> 00:09:05,690 και στη συνέχεια να εκτυπώσετε αυτή τη ακέραιο. 160 00:09:05,690 --> 00:09:09,680 >> Έτσι, βασικά, είμαστε το είδος της reimplementing getint, μόνο η 161 00:09:09,680 --> 00:09:12,350 ακέραιος εγγράφεται στην εντολή γραμμή αντί για το πρόγραμμα 162 00:09:12,350 --> 00:09:14,560 διαδραστικά. 163 00:09:14,560 --> 00:09:23,170 Έτσι, στη συνέχεια, κάνοντας argv 0, ας κάνουμε αυτό εδώ, και κλείστε αυτό. 164 00:09:23,170 --> 00:09:27,670 Έτσι λειτουργεί argv 0, και ας εισέλθουν στο ακέραιος, ένα δύο τρία τέσσερα ένα δύο. 165 00:09:27,670 --> 00:09:30,840 Γι 'αυτό θα εκτυπώσει τον ακέραιο, ένα δύο τρία τέσσερα ένα δύο. 166 00:09:30,840 --> 00:09:35,500 Υπάρχουν κάποιες λεπτές αποχρώσεις για να atoi ότι ότι θα σταματήσουν να νοιάζονται για τίποτα 167 00:09:35,500 --> 00:09:39,040 πέρα από ένα έγκυρο αριθμητικό χαρακτήρα, αλλά αυτό δεν έχει σημασία. 168 00:09:39,040 --> 00:09:42,870 >> Λοιπόν, τι νομίζετε ότι συμβαίνει αν το κάνω αυτό; 169 00:09:42,870 --> 00:09:45,520 170 00:09:45,520 --> 00:09:47,050 Τμηματοποίηση σφάλμα. 171 00:09:47,050 --> 00:09:50,410 Τόσο γιατί είναι αυτό; 172 00:09:50,410 --> 00:09:56,060 Αν κοιτάξουμε πίσω στο πρόγραμμά μας, είμαστε μετατροπή argv 1, το πρώτο επιχείρημα 173 00:09:56,060 --> 00:09:59,610 μετά το όνομα του προγράμματος, σε ακέραιο. 174 00:09:59,610 --> 00:10:03,350 Αλλά δεν υπάρχει κανένα επιχείρημα πέρασε μετά το όνομα του προγράμματος. 175 00:10:03,350 --> 00:10:08,060 Μέχρι εδώ, βλέπουμε ότι αυτό είναι ένα αμαξάκι του προγράμματος, δεδομένου ότι, αν προσπαθήσουμε να το τρέξει 176 00:10:08,060 --> 00:10:10,530 χωρίς επιχειρήματα, θα διακοπεί λίγο. 177 00:10:10,530 --> 00:10:16,950 >> Έτσι, ένα άλλο κοινό μοτίβο που θα δείτε είναι κάτι σαν, αν argc είναι λιγότερο 178 00:10:16,950 --> 00:10:21,100 από δύο, υποδεικνύοντας ότι δεν υπήρχε τουλάχιστον το όνομα του προγράμματος και μια 179 00:10:21,100 --> 00:10:29,100 Το πρώτο επιχείρημα, τότε θα κάνουμε κάτι όπως printf, δεν είναι αρκετό 180 00:10:29,100 --> 00:10:31,190 επιχειρήματα της γραμμής εντολών. 181 00:10:31,190 --> 00:10:33,170 Αυτό είναι πιθανώς δεν είναι ένα καλό αποτέλεσμα για την εκτύπωση, είναι πιθανώς κάτι που, όπως 182 00:10:33,170 --> 00:10:35,440 θα πρέπει να εισάγετε έναν ακέραιο στη γραμμή εντολών. 183 00:10:35,440 --> 00:10:37,450 Θα τελειώσει μόνο εκεί. 184 00:10:37,450 --> 00:10:39,600 Και στη συνέχεια επιστρέφουν 1. 185 00:10:39,600 --> 00:10:44,740 Έτσι, να θυμάστε ότι στο τέλος του μας πρόγραμμα, αν επιστρέψουμε 0, αυτό το είδος της 186 00:10:44,740 --> 00:10:47,060 δείχνει την επιτυχία. 187 00:10:47,060 --> 00:10:50,940 Και κύρια επίσης αυτόματα Επιστρέφει 0 αν δεν το κάνουν. 188 00:10:50,940 --> 00:10:55,800 >> Έτσι, εδώ, είμαστε retuning 1 για να δείξει ότι αυτό δεν είναι επιτυχία. 189 00:10:55,800 --> 00:11:01,000 Και μπορείτε να επιστρέψετε ό, τι θέλετε, Απλά, 0 δείχνει την επιτυχία, και 190 00:11:01,000 --> 00:11:03,390 οτιδήποτε άλλο δείχνει την αποτυχία. 191 00:11:03,390 --> 00:11:04,855 Οπότε ας τρέχει αυτή την εκδοχή των πραγμάτων. 192 00:11:04,855 --> 00:11:12,880 193 00:11:12,880 --> 00:11:16,600 Έτσι τώρα, αν δεν μπει στη γραμμή εντολών επιχείρημα, αυτό θα πει σωστά 194 00:11:16,600 --> 00:11:18,290 μας, δεν είναι αρκετό γραμμή εντολών. 195 00:11:18,290 --> 00:11:20,610 Δεν πρόλαβε να τελειώσει τη φράση. 196 00:11:20,610 --> 00:11:24,950 Αλλιώς, αν περνάμε πραγματικά ένα, μπορεί να ολοκληρώσει το πρόγραμμα. 197 00:11:24,950 --> 00:11:27,920 Έτσι, αυτό είναι το πώς θα χρησιμοποιήσετε το argc προκειμένου να επικυρώσει τον αριθμό των 198 00:11:27,920 --> 00:11:30,630 επιχειρήματα της γραμμής εντολών που μετακυλίεται πράγματι. 199 00:11:30,630 --> 00:11:39,360 >> Ας κάνουμε αυτό το πρόγραμμα λίγο πιο περίπλοκη, και κοιτάξτε τη δεύτερη 200 00:11:39,360 --> 00:11:42,180 επανάληψης των πραγμάτων. 201 00:11:42,180 --> 00:11:46,310 Μέχρι τώρα, δεν είμαστε απλά η εκτύπωση Το πρώτο επιχείρημα της γραμμής εντολών. 202 00:11:46,310 --> 00:11:51,210 Εδώ, είμαστε επανάληψη από int i ισούται 0, i είναι μικρότερο από argc, i συν 203 00:11:51,210 --> 00:11:55,280 καθώς και την εκτύπωση argv, δείκτη i. 204 00:11:55,280 --> 00:11:59,300 Έτσι, αυτό το μοτίβο, και πάλι, αυτό είναι το ίδιο μοτίβο όπως και πριν, εκτός αντί 205 00:11:59,300 --> 00:12:02,600 σύγκλησης της μεταβλητής n, είμαστε χρησιμοποιώντας argc. 206 00:12:02,600 --> 00:12:09,520 >> Έτσι, αυτό είναι πάνω από την επανάληψη κάθε δείκτη στη συστοιχία, και εκτύπωση καθένα 207 00:12:09,520 --> 00:12:11,910 στοιχείο στην εν λόγω συστοιχία. 208 00:12:11,910 --> 00:12:20,300 Και έτσι, όταν θα τρέχει αυτό το πρόγραμμα, και, Εγώ δεν τίθεται κανένα γραμμή εντολών 209 00:12:20,300 --> 00:12:22,540 επιχειρήματα, γι 'αυτό ακριβώς εκτυπώσεις το όνομα του προγράμματος. 210 00:12:22,540 --> 00:12:26,053 Αν μπαίνω ένα σωρό πράγματα, αυτό θα εκτυπώσετε ένα, το καθένα στη δική της γραμμή. 211 00:12:26,053 --> 00:12:31,213 212 00:12:31,213 --> 00:12:32,210 >> OK. 213 00:12:32,210 --> 00:12:34,770 Έτσι, ας ρίξουμε αυτό το ένα βήμα παραπέρα. 214 00:12:34,770 --> 00:12:38,890 Και αντί να τα εκτυπώνει κάθε επιχείρημα στη δική της γραμμή, ας εκτυπώσουμε κάθε 215 00:12:38,890 --> 00:12:42,590 χαρακτήρα του κάθε επιχειρήματος στη δική της γραμμή. 216 00:12:42,590 --> 00:12:46,700 Έτσι, να θυμάστε ότι είναι argv μια σειρά από χορδές. 217 00:12:46,700 --> 00:12:50,960 Έτσι τι είναι μια χορδή, αλλά μια σειρά από χαρακτήρες; 218 00:12:50,960 --> 00:12:57,140 Έτσι, αυτό σημαίνει ότι argv είναι πραγματικά μια συστοιχία μιας σειράς χαρακτήρων. 219 00:12:57,140 --> 00:13:04,920 Έτσι εκμεταλλευόμενοι αυτό, ας το αντιπαρέλθουμε αυτό. 220 00:13:04,920 --> 00:13:08,190 Ας εξετάσει το string argv 0. 221 00:13:08,190 --> 00:13:14,170 >> Έτσι, αν θέλουμε να φέρουμε κάθε χαρακτήρα του argv 0 στη δική της γραμμή, τότε θέλω 222 00:13:14,170 --> 00:13:19,500 να κάνει το σχέδιο που έχουμε συνηθίσει, i είναι μικρότερο από το μήκος της συστοιχίας, 223 00:13:19,500 --> 00:13:23,990 η οποία εδώ, είναι strlen του, που είναι δεν είναι αυτό που θέλω να κάνω, string 224 00:13:23,990 --> 00:13:26,450 s ισούται με argv 0. 225 00:13:26,450 --> 00:13:30,390 Έτσι το i είναι μικρότερο από το μήκος των μας συστοιχία, η οποία σε αυτή την περίπτωση είναι ένας πίνακας 226 00:13:30,390 --> 00:13:34,410 χαρακτήρων, i συν συν. 227 00:13:34,410 --> 00:13:41,040 Και έτσι, όπως είδαμε την περασμένη εβδομάδα, είναι ιδανικό αν κινούμαστε έξω strlen 228 00:13:41,040 --> 00:13:45,210 της κατάστασης, δεδομένου ότι η θα πρέπει να προστεθεί η strlen του s κάθε φορά που πάμε 229 00:13:45,210 --> 00:13:47,720 μέσω του βρόχου, και είναι δεν πρόκειται να αλλάξει. 230 00:13:47,720 --> 00:13:50,230 Γι 'αυτό και θα το ίσο με n εδώ οριστεί. 231 00:13:50,230 --> 00:13:54,260 232 00:13:54,260 --> 00:13:55,170 >> OK. 233 00:13:55,170 --> 00:14:01,320 Έτσι τώρα, είμαστε επανάληψη πάνω κάθε δείκτη στον πίνακα. 234 00:14:01,320 --> 00:14:05,630 Και έτσι, αν θέλουμε να εκτυπώσετε κάθε χαρακτήρα σε αυτόν τον πίνακα, το ποσοστό c είναι 235 00:14:05,630 --> 00:14:06,880 η σημαία που θέλετε να χρησιμοποιήσετε για τους χαρακτήρες. 236 00:14:06,880 --> 00:14:10,750 237 00:14:10,750 --> 00:14:19,770 Και τώρα ένα στήριγμα i πρόκειται να είναι η σειρά, χαρακτήρας του δείκτη i, οπότε αν το 238 00:14:19,770 --> 00:14:20,970 χορδή ήταν γεια. 239 00:14:20,970 --> 00:14:27,530 στη συνέχεια s 0 πρόκειται να είναι H, S βραχίονα 1 θα είναι ε, και ούτω καθεξής. 240 00:14:27,530 --> 00:14:30,800 >> Έτσι, τώρα θέλουμε να συνδυάσουμε Αυτά τα δύο πράγματα. 241 00:14:30,800 --> 00:14:35,440 Θέλουμε να εκτυπώσετε κάθε χαρακτήρα κάθε όρισμα της γραμμής εντολών. 242 00:14:35,440 --> 00:14:38,950 Έτσι θα πάμε για να έχουν ένα ένθετο για το βρόχο. 243 00:14:38,950 --> 00:14:47,480 Και συμβατικά, ο πρώτος μετρητής είναι Ι, το επόμενο θα είναι j, n 244 00:14:47,480 --> 00:14:54,450 θα είναι η strlen της argv i, i είναι μικρότερη από n, i συν συν. 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 Και τώρα, αντί της εκτύπωσης argv i, έτσι argv βραχίονα i πρόκειται να δείκτη - 247 00:15:06,870 --> 00:15:14,280 ότι πρόκειται να είναι η i-οστή γραμμή εντολών επιχείρημα, argv i, j πρόκειται να 248 00:15:14,280 --> 00:15:16,925 είναι η j-οστό χαρακτήρα του το επιχείρημα i-th. 249 00:15:16,925 --> 00:15:20,580 250 00:15:20,580 --> 00:15:24,810 Θα απαλλαγούμε από αυτό εδώ τώρα δεδομένου ότι το βάζουμε σε αυτό το βρόχο. 251 00:15:24,810 --> 00:15:33,900 Έτσι είναι ισοδύναμο με ίσων χορδών s argv i, και στη συνέχεια s βραχίονα j. 252 00:15:33,900 --> 00:15:36,980 >> Λοιπόν, δεν χρειάζεται να δηλώσετε αυτή η μεταβλητή s. 253 00:15:36,980 --> 00:15:44,530 Αντ 'αυτού, θα συνδυάσουμε αυτά τα απλά δύο σε ό, τι είχαμε, argv i, j. 254 00:15:44,530 --> 00:15:45,780 >> ΟΜΙΛΗΤΗΣ 1: [δεν ακούγεται]. 255 00:15:45,780 --> 00:15:48,850 256 00:15:48,850 --> 00:15:49,680 >> ROB BODEN: Καλή κλήση. 257 00:15:49,680 --> 00:15:52,936 Έτσι, αυτό είναι σπασμένο. 258 00:15:52,936 --> 00:15:55,510 Αν εγώ πραγματικά έτρεξε, θα θέλαμε έχουν συνειδητοποιήσει αυτό. 259 00:15:55,510 --> 00:16:01,210 Έτσι, ο μετρητής νοιάζομαι σε αυτή τη συγκεκριμένη για 260 00:16:01,210 --> 00:16:05,410 βρόχου j, ο iterator. 261 00:16:05,410 --> 00:16:08,560 Έτσι θα έχετε τρέξει σε θέματα, ίσως ένας άπειρος βρόχος, αν 262 00:16:08,560 --> 00:16:09,540 δεν είχε καθοριστεί αυτό. 263 00:16:09,540 --> 00:16:12,220 Αυτός είναι ο λόγος για τον οποίο είμαστε επίσης μιλάμε σχετικά με τον εντοπισμό σφαλμάτων σήμερα. 264 00:16:12,220 --> 00:16:13,120 >> OK. 265 00:16:13,120 --> 00:16:15,240 Οπότε ας τρέχει αυτό το πρόγραμμα. 266 00:16:15,240 --> 00:16:21,200 Και ας πραγματικά να προσθέσει ένα ξεχωριστό printf ακριβώς εδώ που θα εκτυπώσετε μόνο 267 00:16:21,200 --> 00:16:27,480 άλλη γραμμή, δεδομένου ότι αυτό σημαίνει ότι όταν εμείς την εκτέλεση του προγράμματος, θα υπάρξει ένα κενό 268 00:16:27,480 --> 00:16:31,830 γραμμή ανάμεσα σε κάθε χαρακτήρα κάθε επιχείρημα της γραμμής εντολών. 269 00:16:31,830 --> 00:16:33,448 Λοιπόν, θα δούμε τι σημαίνει αυτό. 270 00:16:33,448 --> 00:16:37,310 271 00:16:37,310 --> 00:16:37,790 Oop. 272 00:16:37,790 --> 00:16:39,870 Πήρε κάποιο bug. 273 00:16:39,870 --> 00:16:42,860 Σφάλμα σιωπηρά δηλώνοντας λειτουργία της βιβλιοθήκης strlen. 274 00:16:42,860 --> 00:16:51,630 >> Έτσι, πηγαίνει πίσω στο πρόγραμμα μας, ξέχασε να hash περιλαμβάνουν string.h. 275 00:16:51,630 --> 00:16:54,240 276 00:16:54,240 --> 00:16:57,730 Έτσι string.h πρόκειται να είναι η αρχείο κεφαλίδας που δηλώνει 277 00:16:57,730 --> 00:16:58,980 η λειτουργία strlen. 278 00:16:58,980 --> 00:17:04,650 279 00:17:04,650 --> 00:17:06,060 OK, που καταρτίζει. 280 00:17:06,060 --> 00:17:09,109 Τώρα, ας τρέξει. 281 00:17:09,109 --> 00:17:10,930 Έτσι ακριβώς αυτό. 282 00:17:10,930 --> 00:17:17,790 Είναι πρόκειται να εκτυπώσετε μας όνομα του προγράμματος, hello world. 283 00:17:17,790 --> 00:17:23,510 Είναι πρόκειται να εκτυπώσετε το κάθε πράγμα, κάθε χαρακτήρα, στη δική της γραμμή. 284 00:17:23,510 --> 00:17:24,540 OK. 285 00:17:24,540 --> 00:17:30,625 >> Οπότε ας λάβει πράγματι αυτό ένα βήμα παραπέρα. 286 00:17:30,625 --> 00:17:34,050 287 00:17:34,050 --> 00:17:39,700 Και αντί να χρησιμοποιούν string.h, ας σκεφτούμε πώς μπορούμε θα εφαρμόσει τη δική μας 288 00:17:39,700 --> 00:17:41,420 strlen λειτουργία. 289 00:17:41,420 --> 00:17:45,600 Γι 'αυτό θα σας δώσω αμέσως μια υπογραφή λειτουργία. 290 00:17:45,600 --> 00:17:52,900 Οπότε ας καλέσει my_strlen, και είναι πρόκειται να λάβει μια σειρά ως επιχείρημα, 291 00:17:52,900 --> 00:17:57,220 και περιμένουμε να επιστρέψουν την διάρκεια της εν λόγω σειρά. 292 00:17:57,220 --> 00:18:03,430 Λοιπόν, πού είναι αυτός ο τύπος; 293 00:18:03,430 --> 00:18:04,990 Ναι. 294 00:18:04,990 --> 00:18:06,740 OK. 295 00:18:06,740 --> 00:18:12,900 Έτσι, να θυμάστε από την προηγούμενη διαφάνεια που Ήταν, επίσης, από την προηγούμενη εβδομάδα, ότι ένα 296 00:18:12,900 --> 00:18:18,890 σειρά χαρακτήρων, αλλά, μια σειρά, οπότε ας πούμε ότι αυτό είναι σειρά μας s. 297 00:18:18,890 --> 00:18:29,870 Έτσι, αν s είναι το string, γειά σου, τότε, H-Ε-Ε-Ε-Ο, στη μνήμη, που πρόκειται να 298 00:18:29,870 --> 00:18:35,610 είναι, και, στη συνέχεια, αυτό το backslash 0 χαρακτήρας. 299 00:18:35,610 --> 00:18:39,170 >> Επομένως, πώς θα πάρει το μήκος s; 300 00:18:39,170 --> 00:18:43,190 Λοιπόν, το τέχνασμα είναι να ψάχνουν για αυτό Backlash 0 χαρακτήρα, αυτό το null 301 00:18:43,190 --> 00:18:44,380 τερματιστή. 302 00:18:44,380 --> 00:18:50,270 Έτσι, ο αλγόριθμος Πάει να είναι κάτι σαν λίγα 303 00:18:50,270 --> 00:18:51,510 αρκετούς χαρακτήρες ώστε - 304 00:18:51,510 --> 00:18:56,180 ας ρίξουμε αυτό το χέρι αντιπροσωπεύει κάποια μετρητή, ας την ονομάσουμε αυτό το μήκος int. 305 00:18:56,180 --> 00:19:00,060 Έτσι, ξεκινώντας από εδώ, είμαστε πρόκειται να επαναλάβει επί σειρά μας. 306 00:19:00,060 --> 00:19:04,100 >> Έτσι, ο πρώτος χαρακτήρας, είναι Η, και δεν είναι πίσω κάθετο 0, οπότε 307 00:19:04,100 --> 00:19:05,170 το μήκος είναι 1. 308 00:19:05,170 --> 00:19:08,050 Επαναλάβει στον επόμενο χαρακτήρα, Ε, και δεν είναι backslash 0. 309 00:19:08,050 --> 00:19:09,630 Μήκος είναι 2. 310 00:19:09,630 --> 00:19:10,960 L, 3. 311 00:19:10,960 --> 00:19:11,850 L, 4. 312 00:19:11,850 --> 00:19:13,050 O, 5. 313 00:19:13,050 --> 00:19:16,690 Και τέλος, φτάνουμε backslash 0, και έτσι αυτό σημαίνει, επίσης, 314 00:19:16,690 --> 00:19:17,780 αυτή η σειρά έχει τελειώσει. 315 00:19:17,780 --> 00:19:20,130 Οπότε ας επιστρέψουμε 5. 316 00:19:20,130 --> 00:19:33,630 >> Έτσι, στην πραγματικότητα την εφαρμογή, αφενός, μήκους n μου ισούται με 0, το δεξί μου χέρι. 317 00:19:33,630 --> 00:19:36,088 Και θα πάμε να μετακινηθείτε - 318 00:19:36,088 --> 00:19:38,000 >> ΟΜΙΛΗΤΗΣ 1: [δεν ακούγεται] 319 00:19:38,000 --> 00:19:38,640 >> ROB BODEN: Γαμώτο. 320 00:19:38,640 --> 00:19:39,870 Καλή κλήση. 321 00:19:39,870 --> 00:19:42,680 Boom. 322 00:19:42,680 --> 00:19:44,140 Έτσι μήκους n ισούται με μηδέν. 323 00:19:44,140 --> 00:19:46,910 324 00:19:46,910 --> 00:19:58,310 Έτσι τώρα, ενώ το μήκος s δεν ίση και στη συνέχεια, backslash 0. 325 00:19:58,310 --> 00:20:04,660 Έτσι θυμηθείτε, αυτό το backslash 0, είναι μια πραγματικό χαρακτήρα, και αυτό δείχνει 326 00:20:04,660 --> 00:20:05,820 το τέλος του string. 327 00:20:05,820 --> 00:20:09,850 Ακριβώς όπως, επίσης, backslash n είναι ένα πραγματικό χαρακτήρα. 328 00:20:09,850 --> 00:20:14,040 Backslash 0 πρόκειται να υποδείξει το τέλος της συμβολοσειράς μας. 329 00:20:14,040 --> 00:20:15,414 Δεν θέλω να θέσω εκεί. 330 00:20:15,414 --> 00:20:19,190 331 00:20:19,190 --> 00:20:25,620 Και ενώ s αναπροσαρμόζονται με μήκος που δεν είναι ίση με την μηδενική τερματιστή, τότε 332 00:20:25,620 --> 00:20:27,130 είμαστε ακριβώς πρόκειται να αυξήσετε το μήκος. 333 00:20:27,130 --> 00:20:29,860 334 00:20:29,860 --> 00:20:34,880 Έτσι λοιπόν, στο τέλος του προγράμματος μας, μήκος είναι τελικά πρόκειται να 335 00:20:34,880 --> 00:20:37,610 είναι 5 στην περίπτωση αυτή. 336 00:20:37,610 --> 00:20:39,210 Και το μήκος θα επιστρέψω μόνο. 337 00:20:39,210 --> 00:20:42,570 338 00:20:42,570 --> 00:20:43,530 >> OK. 339 00:20:43,530 --> 00:20:48,290 Έτσι, τώρα εδώ κάτω, εγώ δεν κάνω κάνει my_strlen. 340 00:20:48,290 --> 00:20:50,700 Ας το υπολογίσουν για να βεβαιωθείτε ότι όλα δουλεύουν ρολόι. 341 00:20:50,700 --> 00:20:55,820 342 00:20:55,820 --> 00:20:58,210 Έκανα το 2; 343 00:20:58,210 --> 00:21:00,565 Ή ήταν ότι το 1; 344 00:21:00,565 --> 00:21:01,940 Αυτό πρέπει να κάνουμε. 345 00:21:01,940 --> 00:21:02,690 Εντάξει. 346 00:21:02,690 --> 00:21:08,490 Έτσι, αυτό είναι argv 2. 347 00:21:08,490 --> 00:21:11,585 Λειτουργεί όπως αναμενόταν, αν και ήταν ότι το ένα το έκανα μέσα; 348 00:21:11,585 --> 00:21:15,060 349 00:21:15,060 --> 00:21:15,550 Ναι. 350 00:21:15,550 --> 00:21:16,760 OK. 351 00:21:16,760 --> 00:21:21,820 Αυτή η εκδοχή των πραγμάτων δεν έχουν η printf νέα γραμμή μετά, αλλά 352 00:21:21,820 --> 00:21:22,910 δεν κάνει καμία διαφορά. 353 00:21:22,910 --> 00:21:23,300 OK. 354 00:21:23,300 --> 00:21:25,780 Έτσι λειτούργησε όπως αναμενόταν. 355 00:21:25,780 --> 00:21:34,750 >> Τώρα μπορούμε να συνδυάσετε ακόμη και αυτό το ένα βήμα Επίσης, όταν ειδοποίηση εδώ, καλά, 356 00:21:34,750 --> 00:21:38,920 Πρώτα, είμαστε αρπάζοντας το strlen της argv i, και, στη συνέχεια, είμαστε σε επανάληψη 357 00:21:38,920 --> 00:21:41,450 κάθε χαρακτήρας σε αυτή τη χορδή. 358 00:21:41,450 --> 00:21:47,480 Έτσι, αντί να το κάνουμε αυτό, τι θα γίνει αν Απλά συνδυάζουν αυτή τη λογική της αναμονής 359 00:21:47,480 --> 00:21:50,740 μέχρι να χτυπήσει το δικαίωμα backslash 0 σε αυτό για βρόχο; 360 00:21:50,740 --> 00:21:53,740 361 00:21:53,740 --> 00:22:07,490 Έτσι επαναλάβει ενώ argv i, j δεν δεν ισούται backslash 0. 362 00:22:07,490 --> 00:22:10,680 Οπότε ας το τρέξει για πρώτη φορά. 363 00:22:10,680 --> 00:22:19,838 364 00:22:19,838 --> 00:22:21,180 >> Εντάξει. 365 00:22:21,180 --> 00:22:27,655 Έτσι, εδώ, αυτή η κατάσταση λέγοντας - 366 00:22:27,655 --> 00:22:38,090 367 00:22:38,090 --> 00:22:40,060 ας ξεκαθαρίσουμε αυτό. 368 00:22:40,060 --> 00:22:49,140 Έτσι τώρα, αφήστε αυτό να είναι argv μας. 369 00:22:49,140 --> 00:22:55,290 Έτσι, όταν εγώ απλά έτρεξε το πρόγραμμα αυτό πριν, argv είναι ένας πίνακας του χορδές. 370 00:22:55,290 --> 00:23:03,100 Και έτσι, αν μπορώ να το τρέξει με dot κάθετο argv 2, hello world, τότε το argv 371 00:23:03,100 --> 00:23:07,650 η ίδια είναι μήκους 3, για argv μηδέν, γεια σου, και τον κόσμο. 372 00:23:07,650 --> 00:23:11,700 373 00:23:11,700 --> 00:23:19,660 >> Και στο εσωτερικό του καθενός από αυτούς τους δείκτες είναι, το ίδιο ένας πίνακας, όπου αυτό θα είναι 374 00:23:19,660 --> 00:23:23,780 dot, αυτό θα είναι κάθετος, δεν ξέρω αν αυτή ήταν η σωστή κατεύθυνση, I 375 00:23:23,780 --> 00:23:25,680 Δεν νομίζω ότι ήταν. 376 00:23:25,680 --> 00:23:30,110 Α-Κ-V παύλα, χρειάζονται περισσότερο χώρο. 377 00:23:30,110 --> 00:23:32,570 Ας κοπεί σε αυτήν την σειρά. 378 00:23:32,570 --> 00:23:38,230 Α-Κ-V παύλα 0, και στη συνέχεια backslash 0. 379 00:23:38,230 --> 00:23:43,160 Και στη συνέχεια στην αταξία θα είναι γεια. 380 00:23:43,160 --> 00:23:45,910 Ας πούμε, H-Ε backslash 0. 381 00:23:45,910 --> 00:23:51,130 Και τέλος, W-Ο κάθετος 0. 382 00:23:51,130 --> 00:23:59,730 >> Έτσι, ο αλγόριθμος που μόλις έγραψε, το ένθετο για βρόχους, τι είναι 383 00:23:59,730 --> 00:24:07,321 κάνει είναι, πρέπει πρώτα να το μετρητής ί και στη συνέχεια j. 384 00:24:07,321 --> 00:24:15,206 Αυτό θα είναι πιο εύκολη με κωδικό για την οθόνη, Ας πάμε πίσω σε αυτό. 385 00:24:15,206 --> 00:24:17,476 OK. 386 00:24:17,476 --> 00:24:24,600 Έτσι, παρατηρούμε ότι i είναι η iterator που είναι επανάληψη σε κάθε εντολή 387 00:24:24,600 --> 00:24:25,610 όρισμα της γραμμής. 388 00:24:25,610 --> 00:24:28,870 Και j είναι ο iterator την επανάληψη πάνω από κάθε χαρακτήρα που 389 00:24:28,870 --> 00:24:30,410 Το όρισμα της γραμμής εντολών. 390 00:24:30,410 --> 00:24:46,755 Έτσι αυτό εσώτατο printf κάνει είναι, έχουμε printf argv 0 0, printf 391 00:24:46,755 --> 00:24:58,680 argv 0 1, printf argv 0 2 0 3 0 4 0 5, 6 0, αλλά τώρα, argv 0 7 πρόκειται να 392 00:24:58,680 --> 00:25:00,670 ίση backslash 0. 393 00:25:00,670 --> 00:25:05,730 >> Έτσι, τότε θα βγείτε από ότι για το βρόχο, και τώρα εγώ επαναλαμβάνεται σε 1. 394 00:25:05,730 --> 00:25:10,910 Και τώρα θα πάμε για εκτύπωση argv 1 0, 1 1 argv - 395 00:25:10,910 --> 00:25:17,040 καλά, τώρα, από τότε που έκοψε γεια σύντομη, argv 1 2 είναι και πάλι πρόκειται να 396 00:25:17,040 --> 00:25:18,170 backslash 0. 397 00:25:18,170 --> 00:25:25,050 Και έτσι, i αυξήσετε και να συνεχίσει, και ούτω καθεξής, μέχρι να εκτυπώσετε όλα 398 00:25:25,050 --> 00:25:28,580 κόσμο, και αυτές είναι τρεις γραμμή εντολών επιχειρήματα, και θα βγείτε έξω από 399 00:25:28,580 --> 00:25:31,670 η εξόχως απόκεντρες βρόχο, και τελειώσει το πρόγραμμά μας. 400 00:25:31,670 --> 00:25:38,390 401 00:25:38,390 --> 00:25:39,640 OK. 402 00:25:39,640 --> 00:25:43,903 403 00:25:43,903 --> 00:25:46,795 >> Ας επανέλθουμε εδώ. 404 00:25:46,795 --> 00:25:49,670 405 00:25:49,670 --> 00:25:52,370 Έτσι θα αποκτήσουν κάποια εξοικείωση με επιχειρήματα της γραμμής εντολών για το θέμα αυτό 406 00:25:52,370 --> 00:25:54,460 που το συγκεκριμένο πρόβλημα. 407 00:25:54,460 --> 00:25:56,630 >> Τώρα, τον εντοπισμό σφαλμάτων. 408 00:25:56,630 --> 00:26:01,680 Έτσι, πιθανώς να έχετε ήδη έπρεπε να κάνει κάποια εντοπισμού σφαλμάτων με τα προηγούμενα σας 409 00:26:01,680 --> 00:26:03,120 πρόβλημα που τίθεται. 410 00:26:03,120 --> 00:26:08,420 Και ένας πολύ εύκολος τρόπος για τον εντοπισμό σφαλμάτων, Πρώτα, ας δούμε ένα πρόγραμμα λάθη. 411 00:26:08,420 --> 00:26:20,710 412 00:26:20,710 --> 00:26:23,830 Λοιπόν, περπατώντας μέσα από αυτό το πρόγραμμα, θα πάμε να ζητήσει από το χρήστη για ένα 413 00:26:23,830 --> 00:26:29,350 ακέραιος, πιάσε αυτό το ακέραιο και, στη συνέχεια, αυθαίρετα, έχουμε ένα βρόχο while που 414 00:26:29,350 --> 00:26:32,280 πρόκειται ακριβώς για να μειώσετε i μέχρι να είναι ίση με 10. 415 00:26:32,280 --> 00:26:35,820 Ας υποθέσουμε Εισάγω ένας ακέραιος αριθμός μεγαλύτερος από 10. 416 00:26:35,820 --> 00:26:38,700 Έτσι μειώσετε i μέχρι να είναι ίση με 10. 417 00:26:38,700 --> 00:26:42,630 >> Και τότε έχουμε μια άλλη βρόχο while ότι, ενώ εγώ δεν είναι ίσο με 0, είμαστε 418 00:26:42,630 --> 00:26:44,540 πρόκειται να ελαττώνει i από 3. 419 00:26:44,540 --> 00:26:49,790 Έτσι, αν δείτε την πρόθεση του bug εδώ, είναι ότι αυτό θα ελαττώσει i να 420 00:26:49,790 --> 00:26:57,010 είναι 10, και στη συνέχεια αυτό το βρόχο while βούληση μείωση i από 10, έως 7, έως 4, έως 1, 421 00:26:57,010 --> 00:27:02,880 σε αρνητικό 2, σε αρνητικές 5, και ούτω καθεξής, με αρνητικό άπειρο, από τότε που θα 422 00:27:02,880 --> 00:27:05,920 Ποτέ δεν ισούται πράγματι 0. 423 00:27:05,920 --> 00:27:08,610 Και στη συνέχεια στο τέλος αυτού του προγράμματος, έχουμε τη συνάρτηση foo η οποία είναι 424 00:27:08,610 --> 00:27:12,130 πρόκειται για την εκτύπωση από ότι εγώ. 425 00:27:12,130 --> 00:27:16,520 >> Έτσι, αυτό είναι μια μικρή και ασήμαντη πρόγραμμα, και το σφάλμα είναι προφανές, 426 00:27:16,520 --> 00:27:18,790 ειδικά μετά απλά είπε τι το σφάλμα ήταν. 427 00:27:18,790 --> 00:27:24,840 Αλλά η πρόθεση εδώ είναι, καλά, αυτό θα μπορούσε στην πραγματικότητα μοιάζουν με κάποια από σας 428 00:27:24,840 --> 00:27:30,040 λύσεων από άπληστους από την τελευταία πρόβλημα που, και ίσως έχετε 429 00:27:30,040 --> 00:27:32,800 κάποια άπειρο βρόχο στο πρόγραμμά σας, και δεν έχετε καμία ιδέα 430 00:27:32,800 --> 00:27:34,100 τι είναι αυτό που προκαλεί. 431 00:27:34,100 --> 00:27:38,690 Έτσι, μια πολύ χρήσιμη τεχνική εντοπισμού σφαλμάτων είναι να προσθέσετε λίγο printfs 432 00:27:38,690 --> 00:27:40,180 σε όλο τον κωδικό σας. 433 00:27:40,180 --> 00:27:49,200 >> Έτσι, εδώ θέλω μια printf έξω πρώτο loop, ενώ. 434 00:27:49,200 --> 00:27:53,155 Και εδώ θέλω μια printf, και εγώ θα εκτυπώσετε μόνο εγώ. 435 00:27:53,155 --> 00:27:55,670 436 00:27:55,670 --> 00:27:58,330 Θα κάνω ακόμα και τον πρώτο βρόχο while, i. 437 00:27:58,330 --> 00:28:05,130 438 00:28:05,130 --> 00:28:09,040 Έξω, ενώ το δεύτερο loop. 439 00:28:09,040 --> 00:28:12,170 Για άλλη μια φορά, να εκτυπώσετε μέσα από εδώ, η τιμή i. 440 00:28:12,170 --> 00:28:16,270 441 00:28:16,270 --> 00:28:17,520 Και ας τρέχει αυτό. 442 00:28:17,520 --> 00:28:22,620 443 00:28:22,620 --> 00:28:24,800 >> Έτσι dot debug κάθετο. 444 00:28:24,800 --> 00:28:25,610 Εισάγετε έναν ακέραιο αριθμό. 445 00:28:25,610 --> 00:28:28,150 Ας κάνουμε 13. 446 00:28:28,150 --> 00:28:28,760 Και έκρηξη. 447 00:28:28,760 --> 00:28:33,300 Βλέπουμε ότι είμαστε άπειρη looping στο εσωτερικό του δεύτερου βρόχου while. 448 00:28:33,300 --> 00:28:36,305 Μέχρι τώρα γνωρίζουμε τι είναι το σφάλμα. 449 00:28:36,305 --> 00:28:39,610 450 00:28:39,610 --> 00:28:45,610 Αλλά printf debugging είναι απολύτως μεγάλη, αλλά μόλις τα προγράμματά σας να πάρετε 451 00:28:45,610 --> 00:28:50,560 περισσότερο και πιο περίπλοκη, υπάρχουν πιο εξελιγμένες λύσεις σε 452 00:28:50,560 --> 00:28:51,705 να πάρει τα πράγματα που εργάζονται. 453 00:28:51,705 --> 00:28:52,955 Οπότε ας αφαίρεση όλων αυτών των printfs. 454 00:28:52,955 --> 00:29:06,242 455 00:29:06,242 --> 00:29:08,896 Και ας βεβαιωθείτε ότι δεν το έκανα σπάσει τίποτα. 456 00:29:08,896 --> 00:29:09,850 OK. 457 00:29:09,850 --> 00:29:14,180 >> Έτσι, το πρόγραμμα θα πάμε να εισαγάγει καλείται 458 00:29:14,180 --> 00:29:16,715 GDB, για το GNU Debugger. 459 00:29:16,715 --> 00:29:21,892 460 00:29:21,892 --> 00:29:27,510 Λοιπόν, στην πραγματικότητα, ας αφαίρεση debug για ένα δεύτερο, και να κάνει και πάλι debug. 461 00:29:27,510 --> 00:29:31,420 462 00:29:31,420 --> 00:29:34,440 Λοιπόν, στην πραγματικότητα το πρώτο, ένα καλό μάθημα στα επιχειρήματα της γραμμής εντολών. 463 00:29:34,440 --> 00:29:37,780 Σημειώστε ότι αυτή η Clang εντολή που κατάρτιση πάντα είναι να περάσει 464 00:29:37,780 --> 00:29:41,300 στη γραμμή εντολών, αυτές επιχειρήματα της γραμμής εντολών. 465 00:29:41,300 --> 00:29:46,250 Έτσι, ακριβώς πώς θα έχετε την ευκαιρία να χρησιμοποιούν επιχειρήματα της γραμμής εντολών, όπως 466 00:29:46,250 --> 00:29:51,500 έκανε πριν, και όπως θα σε PSET 2, αυτό είναι το πώς Clang τους χρησιμοποιούν. 467 00:29:51,500 --> 00:30:00,070 >> Έτσι, παρατηρούμε ότι αυτή η πρώτη σημαία, παύλα ggdb3, τι λέει είναι, Clang, 468 00:30:00,070 --> 00:30:03,790 θα πρέπει να συγκεντρώσει αυτό το αρχείο με το πρόθεση ότι θα είμαστε τελικά 469 00:30:03,790 --> 00:30:05,380 πρέπει να το debug. 470 00:30:05,380 --> 00:30:13,840 Έτσι εφ 'όσον έχετε αυτή τη σημαία, τότε μπορούμε να GDB debug. 471 00:30:13,840 --> 00:30:17,380 Και αυτό θα ανοίξει το GNU Debugger. 472 00:30:17,380 --> 00:30:22,920 >> Έτσι, υπάρχουν πολλές εντολές ότι θα πρέπει να το συνηθίσετε. 473 00:30:22,920 --> 00:30:27,100 Πρώτος που πιθανότατα θα σας χρειάζονται άμεσα είναι Run. 474 00:30:27,100 --> 00:30:28,200 Έτσι τι είναι Run πρόκειται να κάνει; 475 00:30:28,200 --> 00:30:30,910 Είναι πρόκειται να ξεκινήσει το πρόγραμμά μας. 476 00:30:30,910 --> 00:30:36,180 Έτσι, τρέχει, το πρόγραμμα εκκίνησης, το πρόγραμμα μας ζητάει έναν ακέραιο, 13. 477 00:30:36,180 --> 00:30:39,170 Και τότε είναι άπειρη looping, όπως Αναμένεται, πλην I αφαιρεθεί το 478 00:30:39,170 --> 00:30:40,500 printfs, οπότε δεν χρειάζεται καν να το δω αυτό. 479 00:30:40,500 --> 00:30:43,320 480 00:30:43,320 --> 00:30:44,600 Βγήκε κανονικά. 481 00:30:44,600 --> 00:30:45,850 Αχ. 482 00:30:45,850 --> 00:30:48,570 483 00:30:48,570 --> 00:30:53,640 Είναι πιθανό ότι τυλιγμένα όλα τα τρόπος γύρω, πίσω - αγνοείται το γεγονός ότι. 484 00:30:53,640 --> 00:30:55,170 Ας υποθέσουμε ότι δεν έχει τερματίσει κανονικά. 485 00:30:55,170 --> 00:30:59,500 486 00:30:59,500 --> 00:31:03,370 Υπάρχει μια περίπλοκη απάντηση σε αυτό. 487 00:31:03,370 --> 00:31:07,890 >> Μέχρι τώρα, αυτό δεν είναι πολύ χρήσιμο. 488 00:31:07,890 --> 00:31:11,480 Έτσι ακριβώς λειτουργεί το πρόγραμμά μας μέσα από αυτό το πρόγραμμα εντοπισμού σφαλμάτων δεν μας βοηθά σε κάθε 489 00:31:11,480 --> 00:31:15,610 Έτσι, από τη στιγμή που θα μπορούσε να έχει μόλις κάνει dot κάθετος debug από το εξωτερικό GDB. 490 00:31:15,610 --> 00:31:21,250 Έτσι, η μία εντολή που θα χρειαστεί κατά πάσα πιθανότητα - 491 00:31:21,250 --> 00:31:22,970 και θα σταματήσουν αυτό. 492 00:31:22,970 --> 00:31:25,850 Control-d ή να σταματήσουν, τόσο το έργο. 493 00:31:25,850 --> 00:31:29,550 Ας το ανοίξουμε πάλι. 494 00:31:29,550 --> 00:31:31,130 >> Μια άλλη εντολή που θα πρέπει πιθανώς αμέσως θέλουν να 495 00:31:31,130 --> 00:31:33,600 συνηθίσουν να είναι Break. 496 00:31:33,600 --> 00:31:37,120 Έτσι θα σπάσει την κύρια προς το παρόν, και στη συνέχεια θα το εξηγήσω αυτό. 497 00:31:37,120 --> 00:31:41,010 498 00:31:41,010 --> 00:31:46,370 Λοιπόν, εδώ βλέπουμε θέτουμε ένα σημείο διακοπής σε αυτή τη γραμμή στο debug.c. 499 00:31:46,370 --> 00:31:50,160 Λοιπόν, τι διάλειμμα μέσα είναι ότι όταν πληκτρολογήσετε run, το πρόγραμμα πρόκειται να 500 00:31:50,160 --> 00:31:53,560 συνεχίσει να λειτουργεί μέχρι Χτύπησα ένα σημείο διακοπής. 501 00:31:53,560 --> 00:31:59,390 Έτσι, όταν χτύπησα τρέξιμο, το πρόγραμμα ξεκινά, και στη συνέχεια σπάει αμέσως μόλις 502 00:31:59,390 --> 00:32:01,940 εισέρχεται στην κύρια λειτουργία. 503 00:32:01,940 --> 00:32:06,930 Σπάστε κύρια πρόκειται να είναι κάτι έχετε πολύ συχνά το κάνουν. 504 00:32:06,930 --> 00:32:11,340 >> Και τώρα, για να σας παρουσιάσουμε σε ορισμένες περισσότερες εντολές. 505 00:32:11,340 --> 00:32:14,330 Σημειώστε εδώ, ότι λέει ότι έσπασε στη γραμμή 11, η οποία είναι 506 00:32:14,330 --> 00:32:16,230 printf, εισάγετε έναν ακέραιο αριθμό. 507 00:32:16,230 --> 00:32:21,260 Έτσι, η εντολή Επόμενο πρόκειται να είναι το πώς πάμε στην επόμενη γραμμή κώδικα. 508 00:32:21,260 --> 00:32:24,810 Αυτό πρόκειται να μας επιτρέψει να εντείνουν μέσω της γραμμής του προγράμματος μας γραμμή. 509 00:32:24,810 --> 00:32:26,260 Έτσι, την επόμενη. 510 00:32:26,260 --> 00:32:29,820 >> Τώρα γραμμή 12, θα πάμε για να πάρει το ακέραιο. 511 00:32:29,820 --> 00:32:30,450 Επόμενο. 512 00:32:30,450 --> 00:32:34,290 Και αν απλά να πατήσετε το Enter και πάλι, αυτό θα επαναλάβετε το τελευταίο πράγμα που κάνατε. 513 00:32:34,290 --> 00:32:36,480 Γι 'αυτό και δεν χρειάζεται να πληκτρολογήσετε επόμενη κάθε φορά. 514 00:32:36,480 --> 00:32:40,100 Έτσι, εισάγετε έναν ακέραιο αριθμό, 13. 515 00:32:40,100 --> 00:32:46,940 Έτσι τώρα, γραμμή 14, ενώ το i είναι μεγαλύτερο από 10, και θα κάνω το επόμενο. 516 00:32:46,940 --> 00:32:48,685 Και βλέπουμε εμείς πάμε για να μειώσετε i. 517 00:32:48,685 --> 00:32:50,210 Έτσι θα πάμε για να μειώσετε i ξανά. 518 00:32:50,210 --> 00:32:53,620 >> Έτσι, τώρα, ένα άλλο χρήσιμο εντολή είναι Εκτύπωση. 519 00:32:53,620 --> 00:32:55,750 Έτσι Εκτύπωση πρόκειται να εκτυπώσετε η τιμή της μεταβλητής. 520 00:32:55,750 --> 00:32:57,825 Ας αναδείξει την αξία της μεταβλητής i. 521 00:32:57,825 --> 00:32:58,705 Ας εκτυπώσετε i. 522 00:32:58,705 --> 00:33:00,910 Δεν πρόκειται να πω ότι είναι 11. 523 00:33:00,910 --> 00:33:03,330 Τώρα έχουμε και πάλι Next, ενώ i είναι μεγαλύτερος από 10. 524 00:33:03,330 --> 00:33:05,590 Γι 'αυτό και είναι ακόμη μεγαλύτερη από ό, τι 10, δεδομένου ότι είναι 11. 525 00:33:05,590 --> 00:33:06,920 i μείον μείον. 526 00:33:06,920 --> 00:33:08,250 Ας εκτυπώσετε i ξανά. 527 00:33:08,250 --> 00:33:10,950 Όπως ήταν αναμενόμενο, είναι 10. 528 00:33:10,950 --> 00:33:12,510 >> Μέχρι τώρα, το επόμενο. 529 00:33:12,510 --> 00:33:16,250 Είναι πηγαίνει πίσω στην κατάσταση i είναι μεγαλύτερο από 10, αλλά εγώ τώρα είναι 10, έτσι 530 00:33:16,250 --> 00:33:20,040 δεν είναι μεγαλύτερος από 10, οπότε αναμένουμε να πέσουν έξω από τον βρόχο while. 531 00:33:20,040 --> 00:33:22,220 Και τώρα είμαστε κάτω από την γραμμή του κώδικα. 532 00:33:22,220 --> 00:33:28,750 Και μια άλλη εντολή, List, είναι ακριβώς πρόκειται για να εμφανίσετε την προηγούμενη και την επόμενη 533 00:33:28,750 --> 00:33:31,240 μερικές γραμμές κώδικα, σε Αν εαυτό σας χάνεται. 534 00:33:31,240 --> 00:33:35,420 Γι 'αυτό και μόλις βγήκε από αυτό το βρόχο while, και τώρα έχουμε εισέλθει σε αυτό 535 00:33:35,420 --> 00:33:37,080 while loop, γραμμή 18. 536 00:33:37,080 --> 00:33:39,860 Έτσι, ενώ εγώ δεν είναι ίσο με 0. 537 00:33:39,860 --> 00:33:46,570 Και, στη συνέχεια, i i ισούται με μείον 3, και θα παρατηρήσετε, αυτό απλά θα συνεχίσω. 538 00:33:46,570 --> 00:33:48,270 Και θα μπορώ να εκτυπώσετε. 539 00:33:48,270 --> 00:33:49,990 >> Κάθε εντολή είδος έχει συντομεύσεις. 540 00:33:49,990 --> 00:33:51,720 Έτσι, p είναι μικρή για εκτύπωση. 541 00:33:51,720 --> 00:33:53,400 Έτσι μπορούμε p i. 542 00:33:53,400 --> 00:33:57,550 Απλά κρατήστε πατημένο n, ή συνεχίστε να κάνετε Επόμενο. 543 00:33:57,550 --> 00:33:58,340 Εκτυπώστε ξανά το i. 544 00:33:58,340 --> 00:34:00,380 Βλέπετε τώρα είναι αρνητικό 167. 545 00:34:00,380 --> 00:34:06,030 Έτσι, αυτό θα συνεχιστεί επ 'αόριστον, αλλά δεν πραγματικά πάντα, από τη στιγμή που μόλις είδατε, το 546 00:34:06,030 --> 00:34:09,330 στην πραγματικότητα θα καταλήξετε σε κάποιο σημείο. 547 00:34:09,330 --> 00:34:15,699 >> Έτσι ώστε η Αρχή GDB. 548 00:34:15,699 --> 00:34:19,504 Αλλά ας κάνουμε ένα πράγμα στο GDB. 549 00:34:19,504 --> 00:34:20,754 Χμ, debug. 550 00:34:20,754 --> 00:34:23,540 551 00:34:23,540 --> 00:34:28,534 Έτσι, σε αυτή τη συγκεκριμένη περίπτωση, η άπειρο βρόχο έτυχε να είναι στο εσωτερικό του 552 00:34:28,534 --> 00:34:30,050 η κύρια λειτουργία. 553 00:34:30,050 --> 00:34:35,779 Και για τώρα, απλά αποδέχονται ότι ότι είμαι πρόκειται να μετακινήσετε το άπειρο βρόχο σε 554 00:34:35,779 --> 00:34:37,029 η συνάρτηση foo. 555 00:34:37,029 --> 00:34:40,679 556 00:34:40,679 --> 00:34:43,730 Απλά να θυμάστε ότι, στο τέλος αυτού του πρόγραμμα, καλά, αυτό ήταν αρχικά 557 00:34:43,730 --> 00:34:46,210 καλώντας foo, ο οποίος ήταν μόλις πρόκειται να εκτυπώσετε i. 558 00:34:46,210 --> 00:34:51,880 Αλλά τώρα είμαστε καλώντας foo, η οποία είναι πρόκειται να μειώσετε i μέχρι να είναι 0, και 559 00:34:51,880 --> 00:34:54,548 στη συνέχεια, εκτυπώστε αυτή τη μεταβλητή. 560 00:34:54,548 --> 00:34:55,469 OK. 561 00:34:55,469 --> 00:34:57,970 Αποθηκεύστε αυτό. 562 00:34:57,970 --> 00:35:00,175 Κάντε debug. 563 00:35:00,175 --> 00:35:03,310 Και τώρα, gdb debug. 564 00:35:03,310 --> 00:35:04,090 OK. 565 00:35:04,090 --> 00:35:10,580 >> Έτσι, αν θέλω απλώς να τρέξει, τότε εγώ δεν πρόκειται να να είναι σε θέση να ενισχύσει πραγματικά μέσα μου 566 00:35:10,580 --> 00:35:11,730 προγράμματος γραμμή-γραμμή. 567 00:35:11,730 --> 00:35:19,820 Έτσι, ας σπάσει σε κεντρικό, και στη συνέχεια να πληκτρολογήσετε τη λέξη run. 568 00:35:19,820 --> 00:35:28,160 Έτσι, περνούν από αυτό, printf, πληκτρολογήστε ακέραιος, να πάρει τον ακέραιο, 13. 569 00:35:28,160 --> 00:35:34,180 570 00:35:34,180 --> 00:35:37,490 Έτσι θα πάμε για να κρατήσει που μειώνεται, μέχρι να είναι μεγαλύτερο από 10. 571 00:35:37,490 --> 00:35:42,840 Στη συνέχεια, θα πάμε να πέσει μέσα από το while loop, και να φτάσει στη γραμμή - 572 00:35:42,840 --> 00:35:44,364 ας ανοίξει σε ξεχωριστό παράθυρο. 573 00:35:44,364 --> 00:35:48,720 574 00:35:48,720 --> 00:35:53,300 Γι 'αυτό και μειώνεται μέχρι που δεν ήταν πλέον μεγαλύτερο από 10, και τότε 575 00:35:53,300 --> 00:35:55,700 κάλεσε τη λειτουργία, foo. 576 00:35:55,700 --> 00:36:01,340 >> Έτσι, ό, τι συνέβη το συντομότερο χτύπησα συνάρτηση foo, καλά, κάλεσα foo, και 577 00:36:01,340 --> 00:36:04,030 τότε δεν είχα πλέον τον έλεγχο της GDB. 578 00:36:04,030 --> 00:36:10,230 Έτσι, μόλις χτύπησα Επόμενο σε αυτή τη γραμμή, τα πράγματα συνεχίζονταν μέχρι να συμβεί αυτό, 579 00:36:10,230 --> 00:36:12,400 όπου το πρόγραμμα βγήκε, όταν - 580 00:36:12,400 --> 00:36:14,450 υποθέσουμε ότι δεν υπήρχε τελικά. 581 00:36:14,450 --> 00:36:16,390 Είδατε να σταματήσουμε για λίγο όμως. 582 00:36:16,390 --> 00:36:22,040 Έτσι, γιατί έχω χάσει τον έλεγχο το πρόγραμμα σε εκείνο το σημείο; 583 00:36:22,040 --> 00:36:27,540 Λοιπόν, όταν πληκτρολογείτε την επόμενη, που πηγαίνει στο η κυριολεκτική επόμενη γραμμή κώδικα που 584 00:36:27,540 --> 00:36:28,850 θα εκτελέσει. 585 00:36:28,850 --> 00:36:35,950 Έτσι, μετά την γραμμή 21, η επόμενη γραμμή κώδικα που θα εκτελέσει είναι η γραμμή 22, 586 00:36:35,950 --> 00:36:38,520 η οποία είναι, κατά την έξοδο από το κύριο. 587 00:36:38,520 --> 00:36:43,810 Γι 'αυτό και δεν θέλω να πάω απλά στην επόμενη γραμμή κώδικα. 588 00:36:43,810 --> 00:36:48,170 Θέλω να πάω στη λειτουργία, foo, και στη συνέχεια, επίσης, βήμα μέσα 589 00:36:48,170 --> 00:36:49,830 αυτές τις γραμμές κώδικα. 590 00:36:49,830 --> 00:36:53,726 >> Έτσι, γι 'αυτό, έχουμε μια εναλλακτική λύση. 591 00:36:53,726 --> 00:36:56,770 Ας σταματήσουν ότι και πάλι. 592 00:36:56,770 --> 00:36:58,020 Σπάστε κύριο. 593 00:36:58,020 --> 00:37:00,520 594 00:37:00,520 --> 00:37:06,370 Uh, 1, δίπλα, δίπλα, 13, δίπλα, Στη συνέχεια, δίπλα, προσεκτικά, 595 00:37:06,370 --> 00:37:09,820 πριν χτυπήσει γραμμή foo. 596 00:37:09,820 --> 00:37:10,520 OK. 597 00:37:10,520 --> 00:37:13,700 >> Έτσι τώρα, είμαστε στη γραμμή 21, όπου καλούμε foo. 598 00:37:13,700 --> 00:37:17,100 Δεν θέλουμε να πληκτρολογήσετε στη συνέχεια, δεδομένου ότι η θα καλέσει μόνο τη συνάρτηση foo, και 599 00:37:17,100 --> 00:37:18,710 μεταβείτε στην επόμενη γραμμή κώδικα. 600 00:37:18,710 --> 00:37:20,840 Αυτό που θέλουμε να χρησιμοποιήσουμε είναι βήμα. 601 00:37:20,840 --> 00:37:25,690 Έτσι, υπάρχει μια διαφορά μεταξύ του Σταδίου και συνέχεια, όπου Βήμα βήματα στο 602 00:37:25,690 --> 00:37:28,190 λειτουργεί, και Next πηγαίνει πάνω από την λειτουργία. 603 00:37:28,190 --> 00:37:32,830 Εκτελεί μόνο το σύνολο των η λειτουργία και συνεχίζει. 604 00:37:32,830 --> 00:37:37,210 >> Έτσι Βήμα πρόκειται να μας φέρει στη λειτουργία, foo. 605 00:37:37,210 --> 00:37:41,160 Και βλέπουμε εδώ, τώρα, είμαστε πίσω στο Αυτό βρόχος while είναι, θεωρητικά, 606 00:37:41,160 --> 00:37:44,190 πρόκειται να συνεχιστεί για πάντα. 607 00:37:44,190 --> 00:37:50,420 Και αν χτυπήσει βήμα, όταν δεν είναι καν μια λειτουργία για να καλέσετε, τότε είναι 608 00:37:50,420 --> 00:37:51,720 ταυτόσημη με Next. 609 00:37:51,720 --> 00:37:55,320 Έτσι, μόνο όταν είστε σε μια γραμμή που καλεί μια λειτουργία που Βήμα 610 00:37:55,320 --> 00:37:56,970 πρόκειται να διαφέρουν από Next. 611 00:37:56,970 --> 00:37:57,930 Έτσι, βήμα που θα μας φέρει εδώ. 612 00:37:57,930 --> 00:38:02,100 Βήμα, το βήμα, το βήμα, το βήμα, το βήμα, το βήμα, και εμείς θα πρέπει ακριβώς άπειρο βρόχο για πάντα. 613 00:38:02,100 --> 00:38:06,810 >> Έτσι, μπορείτε να συνηθίσουν σε αυτό που σας τρόπος προσδιορισμού άπειρες φορές, είναι 614 00:38:06,810 --> 00:38:08,960 απλά κρατώντας αυτό το πλήκτρο Enter για να δείτε πού θα κολλήσει. 615 00:38:08,960 --> 00:38:11,610 616 00:38:11,610 --> 00:38:14,780 Υπάρχουν καλύτεροι τρόποι να το κάνουμε αυτό, αλλά για τώρα, αυτό είναι απολύτως επαρκής. 617 00:38:14,780 --> 00:38:17,967 Και στυλιστικά, να συμμορφώνονται με στυλ 50, θα έπρεπε να είχα κάνει αυτό. 618 00:38:17,967 --> 00:38:21,550 619 00:38:21,550 --> 00:38:24,030 OK. 620 00:38:24,030 --> 00:38:28,400 >> Έτσι, μια τελευταία εντολή για την εισαγωγή. 621 00:38:28,400 --> 00:38:30,810 Λοιπόν, ας το GDB debug μέσα 622 00:38:30,810 --> 00:38:35,580 Έτσι, αντί να σπάσει σε κύρια, αν γνωρίζουν τη λειτουργία foo είναι επίσης η 623 00:38:35,580 --> 00:38:39,230 το πρόβλημα, τότε θα μπορούσα να έχω μόνο είπε, να σπάσει σε foo, αντ 'αυτού. 624 00:38:39,230 --> 00:38:42,310 Ας πούμε ότι σπάνε σε την κύρια και την foo. 625 00:38:42,310 --> 00:38:45,390 Έτσι, μπορείτε να ορίσετε ως πολλά σημεία διακοπής όπως θέλετε. 626 00:38:45,390 --> 00:38:49,230 Όταν πληκτρολογήσετε run, πρόκειται να σταματήσει κατά τη - 627 00:38:49,230 --> 00:38:52,180 ooh, ας ξαναμεταγλωττίσετε, δεδομένου Άλλαξα τα πράγματα. 628 00:38:52,180 --> 00:38:55,950 Θα δείτε αυτή τη γραμμή, Warning, πηγή το αρχείο είναι πιο πρόσφατη από εκτελέσιμο. 629 00:38:55,950 --> 00:38:59,680 Έτσι, αυτό σημαίνει ότι Πήγα εδώ και άλλαξε αυτές να συμμορφώνονται με στυλ 630 00:38:59,680 --> 00:39:03,100 50, αλλά δεν είχα recompile το πρόγραμμα. 631 00:39:03,100 --> 00:39:04,870 Έτσι GDB με κάνει να συνειδητοποιήσω αυτό. 632 00:39:04,870 --> 00:39:10,130 Θα σταματήσουν, κάνουν πάλι debug, χτύπησε gdb debug. 633 00:39:10,130 --> 00:39:10,700 OK. 634 00:39:10,700 --> 00:39:12,800 >> Έτσι τώρα, πίσω σε ό, τι έκανα. 635 00:39:12,800 --> 00:39:15,720 Διάλειμμα κύρια, διάλειμμα foo. 636 00:39:15,720 --> 00:39:20,680 Τώρα, αν θα τρέξει το πρόγραμμα, έτσι ώστε να είναι πρόκειται να συνεχιστεί έως ότου χτυπά 637 00:39:20,680 --> 00:39:21,320 breakpoint. 638 00:39:21,320 --> 00:39:24,680 Αυτό συμβαίνει σε σημείο διακοπής είναι η πρώτη στην κύρια. 639 00:39:24,680 --> 00:39:28,630 Τώρα, αντί να κάνει την επόμενη, δίπλα, δίπλα, δίπλα, δίπλα, μέχρι να χτυπήσει foo, I 640 00:39:28,630 --> 00:39:35,230 να πληκτρολογήσετε συνεχιστεί, η οποία θα συνεχιστεί μέχρι να χτυπήσει το επόμενο σημείο διακοπής. 641 00:39:35,230 --> 00:39:37,200 Θα πρέπει να εισάγετε τον ακέραιο πρώτα. 642 00:39:37,200 --> 00:39:40,570 Συνέχεια θα συνεχιστεί μέχρι να χτυπήσει το επόμενο σημείο διακοπής, η οποία είναι ότι 643 00:39:40,570 --> 00:39:43,320 λειτουργία του foo. 644 00:39:43,320 --> 00:39:50,130 >> Έτσι Run θα διαρκέσει μέχρι να χτυπήσει ένα breakpoint, αλλά θα πληκτρολογήσετε μόνο όταν τρέχει 645 00:39:50,130 --> 00:39:54,060 ξεκινάτε το πρόγραμμα και, στη συνέχεια, από τότε, είναι να συνεχίσει. 646 00:39:54,060 --> 00:40:01,950 Αν έκανα ακριβώς σπάσει κύρια και Στη συνέχεια έτρεξε, αυτό θα σπάσει σε 647 00:40:01,950 --> 00:40:03,670 κύρια, και στη συνέχεια να συνεχίσει. 648 00:40:03,670 --> 00:40:10,050 Δεδομένου ότι δεν έχω ένα σημείο καμπής στο foo, εισάγετε το ακέραιο, στη συνέχεια, τώρα είμαι 649 00:40:10,050 --> 00:40:11,380 δεν πρόκειται να σπάσει στο foo. 650 00:40:11,380 --> 00:40:16,318 Είναι ακριβώς πρόκειται να άπειρο βρόχο μέχρι που. 651 00:40:16,318 --> 00:40:17,568 OK. 652 00:40:17,568 --> 00:40:19,500 653 00:40:19,500 --> 00:40:24,420 >> Έτσι ώστε να είναι Εισαγωγή στην GDB. 654 00:40:24,420 --> 00:40:27,790 Θα πρέπει να αρχίσετε να χρησιμοποιείτε το το πρόβλημα σύνολα σας. 655 00:40:27,790 --> 00:40:30,550 Μπορεί να είναι πολύ χρήσιμη για τον εντοπισμό bugs. 656 00:40:30,550 --> 00:40:35,280 Αν στην πραγματικότητα απλά, γραμμή-γραμμή, πηγαίνετε μέσα στον κώδικα, και να συγκρίνουν τι είναι 657 00:40:35,280 --> 00:40:39,740 πραγματικά συμβαίνει με ό, τι θα περίμενε κανείς να συμβεί, τότε είναι αρκετά 658 00:40:39,740 --> 00:40:41,060 δύσκολο να χάσετε τα σφάλματα σου. 659 00:40:41,060 --> 00:40:45,280 660 00:40:45,280 --> 00:40:46,530 OK. 661 00:40:46,530 --> 00:40:48,310 662 00:40:48,310 --> 00:40:54,040 >> Έτσι, την περασμένη εβδομάδα ο David μεγαλώσει αυτό μυστικού κλειδιού κρυπτογράφησης πράγματα για το 663 00:40:54,040 --> 00:40:59,350 για πρώτη φορά, όπου δεν θέλουμε κωδικούς πρόσβασης μόνο να αποθηκευτεί σε μας 664 00:40:59,350 --> 00:41:03,210 υπολογιστή σε κάποιο απλό αρχείο κειμένου, όπου κάποιος μπορεί να έρθει ξανά και απλά 665 00:41:03,210 --> 00:41:04,660 να το ανοίξετε και να τις διαβάσετε. 666 00:41:04,660 --> 00:41:07,530 Ιδανικά, θα πρέπει να κρυπτογραφηθεί με κάποιο τρόπο. 667 00:41:07,530 --> 00:41:13,340 Και στο πρόβλημα Set 2, θα πρέπει να ασχολείται με μια μέθοδο κρυπτογράφησης, 668 00:41:13,340 --> 00:41:16,520 ή, επίσης, δύο μεθόδους, αλλά δεν είναι τόσο μεγάλη. 669 00:41:16,520 --> 00:41:20,050 Αν κάνετε την έκδοση του χάκερ, είστε Επίσης, πρόκειται να ασχολείται με 670 00:41:20,050 --> 00:41:22,150 αποκρυπτογράφηση κάποια πράγματα. 671 00:41:22,150 --> 00:41:29,770 >> Έτσι, το θέμα τώρα είναι, επίσης, ακόμη και αν έχουμε την ισχυρότερη κρυπτογράφηση 672 00:41:29,770 --> 00:41:34,830 αλγόριθμο στον κόσμο, αν επιλέξετε ένα ιδιαίτερα κακή κωδικό πρόσβασης, τότε 673 00:41:34,830 --> 00:41:37,720 δεν θα σας βοηθήσει πάρα πολύ, δεδομένου ότι οι άνθρωποι θα εξακολουθεί να είναι σε θέση να το καταλάβω. 674 00:41:37,720 --> 00:41:41,530 Ακόμα κι αν βλέπουμε την κρυπτογραφημένη συμβολοσειρά και μοιάζει με ένα σωρό από σκουπίδια 675 00:41:41,530 --> 00:41:44,760 ότι δεν σημαίνει τίποτα για αυτούς, αν ακόμα απλά πρέπει να δοκιμάσετε μερικά κωδικούς πρόσβασης 676 00:41:44,760 --> 00:41:50,560 να το καταλάβω, τότε θα δεν είναι πολύ ασφαλής. 677 00:41:50,560 --> 00:41:55,890 Έτσι, βλέποντας ένα βίντεο που καθιστά αυτό το σημείο. 678 00:41:55,890 --> 00:41:59,587 679 00:41:59,587 --> 00:42:00,970 >> [VIDEO PLAYBACK] 680 00:42:00,970 --> 00:42:02,100 >> -Κράνη, θα δαίμονας. 681 00:42:02,100 --> 00:42:03,370 Τι συμβαίνει; 682 00:42:03,370 --> 00:42:05,170 Τι κάνεις με την κόρη μου; 683 00:42:05,170 --> 00:42:09,910 >> -Επιτρέψτε μου να εισαγάγει το λαμπρό νέους πλαστικό χειρουργό, ο Δρ Phillip 684 00:42:09,910 --> 00:42:13,730 Σλότκιν, η μεγαλύτερη μύτη άνθρωπος εργασία σε ολόκληρο το 685 00:42:13,730 --> 00:42:16,080 σύμπαν, και το Μπέβερλι Χιλς. 686 00:42:16,080 --> 00:42:17,210 >> -Σας Υψηλότατε. 687 00:42:17,210 --> 00:42:18,070 >> -Δουλειά μύτη; 688 00:42:18,070 --> 00:42:18,670 Δεν καταλαβαίνω. 689 00:42:18,670 --> 00:42:20,090 Έχει ήδη είχε μια εργασία μύτης. 690 00:42:20,090 --> 00:42:21,910 Ήταν ένα γλυκό δεκαέξι παρόν. 691 00:42:21,910 --> 00:42:22,140 >> -Όχι. 692 00:42:22,140 --> 00:42:23,690 Δεν είναι αυτό που νομίζεις. 693 00:42:23,690 --> 00:42:25,420 Είναι πολύ, πολύ χειρότερα. 694 00:42:25,420 --> 00:42:30,300 Αν δεν μου δώσετε το συνδυασμό με η ασπίδα του αέρα, ο Δρ Σλότκιν θα 695 00:42:30,300 --> 00:42:34,226 δώσει πίσω την κόρη σου παλιά μύτη της. 696 00:42:34,226 --> 00:42:35,476 >> -Όχι. 697 00:42:35,476 --> 00:42:38,712 698 00:42:38,712 --> 00:42:40,516 Πού το βρήκες αυτό; 699 00:42:40,516 --> 00:42:41,440 >> -Εντάξει. 700 00:42:41,440 --> 00:42:42,180 Θα το πω. 701 00:42:42,180 --> 00:42:43,381 Θα το πω. 702 00:42:43,381 --> 00:42:44,263 Όχι, μπαμπά. 703 00:42:44,263 --> 00:42:45,590 Όχι, δεν πρέπει. 704 00:42:45,590 --> 00:42:46,860 >> -Εχεις δίκιο, αγαπητέ μου. 705 00:42:46,860 --> 00:42:48,450 Θα μου λείψει η νέα μύτη σας. 706 00:42:48,450 --> 00:42:52,090 Αλλά δεν θα του πω το συνδυασμό, δεν έχει σημασία τι. 707 00:42:52,090 --> 00:42:53,680 >> -Πολύ καλά. 708 00:42:53,680 --> 00:42:55,685 Ο Δρ Σλότκιν, όσο χειρότερα τόσο καλύτερα. 709 00:42:55,685 --> 00:42:56,914 >> -Μου ευχαρίστηση. 710 00:42:56,914 --> 00:43:00,690 >> [TOOLS είναι αιχμηρή] 711 00:43:00,690 --> 00:43:01,910 >> -Όχι. 712 00:43:01,910 --> 00:43:02,520 Περιμένετε. 713 00:43:02,520 --> 00:43:03,836 Περιμένετε. 714 00:43:03,836 --> 00:43:05,300 Θα το πω. 715 00:43:05,300 --> 00:43:06,880 Θα το πω. 716 00:43:06,880 --> 00:43:09,130 >> -Το ήξερα ότι θα μπορούσε να λειτουργήσει. 717 00:43:09,130 --> 00:43:09,900 Εντάξει. 718 00:43:09,900 --> 00:43:12,850 Δώστο μου. 719 00:43:12,850 --> 00:43:16,918 >> -Ο συνδυασμός είναι ένα. 720 00:43:16,918 --> 00:43:17,406 >> -One. 721 00:43:17,406 --> 00:43:18,382 >> -One. 722 00:43:18,382 --> 00:43:19,358 >> -Δύο. 723 00:43:19,358 --> 00:43:19,846 >> -Δύο. 724 00:43:19,846 --> 00:43:20,822 >> -Δύο. 725 00:43:20,822 --> 00:43:21,310 >> -Τρία. 726 00:43:21,310 --> 00:43:21,798 >> -Τρία. 727 00:43:21,798 --> 00:43:22,774 >> -Τρία. 728 00:43:22,774 --> 00:43:23,262 >> -Τέσσερα. 729 00:43:23,262 --> 00:43:23,750 >> -Τέσσερα. 730 00:43:23,750 --> 00:43:26,150 >> -Τέσσερα. 731 00:43:26,150 --> 00:43:27,010 >> -Πέντε. 732 00:43:27,010 --> 00:43:27,670 >> -Πέντε. 733 00:43:27,670 --> 00:43:29,010 >> -Πέντε. 734 00:43:29,010 --> 00:43:34,770 >> -Έτσι, ο συνδυασμός είναι ένα, δύο, τρία, τέσσερα, πέντε. 735 00:43:34,770 --> 00:43:37,460 Αυτό είναι το πιο χαζό συνδυασμός Έχω ακούσει ποτέ στη ζωή μου. 736 00:43:37,460 --> 00:43:39,710 Αυτό είναι το είδος των πράγμα που ένας ηλίθιος θα έχει στις αποσκευές του. 737 00:43:39,710 --> 00:43:42,000 >> -Σ 'ευχαριστώ, Υψηλότατε. 738 00:43:42,000 --> 00:43:43,530 >> -Τι έκανες; 739 00:43:43,530 --> 00:43:44,490 >> -Γύρισα από τον τοίχο. 740 00:43:44,490 --> 00:43:45,420 >> -Όχι, δεν το έκανε. 741 00:43:45,420 --> 00:43:45,840 Έχετε απενεργοποιήσει ολόκληρη την ταινία. 742 00:43:45,840 --> 00:43:46,930 >> -Θα πρέπει να πατήσετε το κουμπί λάθος. 743 00:43:46,930 --> 00:43:48,265 >> -Λοιπόν, το βάζουμε πίσω. 744 00:43:48,265 --> 00:43:49,110 Βάλτε την ταινία πίσω. 745 00:43:49,110 --> 00:43:49,510 >> -Ναι, κύριε. 746 00:43:49,510 --> 00:43:49,917 Ναι, κύριε. 747 00:43:49,917 --> 00:43:50,324 >> -Πάμε, Arnold. 748 00:43:50,324 --> 00:43:51,140 Έλα, Γκρέτσεν. 749 00:43:51,140 --> 00:43:53,060 Φυσικά, ξέρετε εγώ θα εξακολουθεί να Πρέπει να σας χρεώσει για αυτό. 750 00:43:53,060 --> 00:43:53,440 >> [ΤΕΛΟΣ VIDEO PLAYBACK] 751 00:43:53,440 --> 00:43:54,690 >> ROB BODEN: Εντάξει. 752 00:43:54,690 --> 00:43:59,690 753 00:43:59,690 --> 00:44:08,430 Έτσι, τώρα που είμαστε ήδη μιλάμε για ασφάλειας κατά κάποιο τρόπο, ωραίο 754 00:44:08,430 --> 00:44:16,050 μικρή αφίσα της ταινίας, ώστε τα τελευταία ημέρες, τα θέματα αυτά με την NSA 755 00:44:16,050 --> 00:44:17,300 παρακολουθούν τα πάντα. 756 00:44:17,300 --> 00:44:21,840 757 00:44:21,840 --> 00:44:26,930 Μπορεί να είναι δύσκολο να νιώθετε σαν να έχουν κάποιο είδος της ιδιωτικής ζωής στον 758 00:44:26,930 --> 00:44:34,540 σε απευθείας σύνδεση κόσμο, αν και δεν θα μπορούσα να πω που οι περισσότεροι από τα στοιχεία του PRISM. 759 00:44:34,540 --> 00:44:42,130 Έτσι, προχωρώντας πέρα ​​από PRISM, εμείς δεν πρόκειται να μιλάμε γι 'αυτό, τώρα 760 00:44:42,130 --> 00:44:44,030 σκεφτείτε για το laptop σας. 761 00:44:44,030 --> 00:44:48,360 Έτσι, εδώ, θέλω να στραφούν την πραγματική λογαριασμό μου, 762 00:44:48,360 --> 00:44:50,370 με μικρό πιγκουίνο μου. 763 00:44:50,370 --> 00:44:57,310 Έτσι έχω ένα σύνολο κωδικό πρόσβασης, και ότι κωδικός πρόσβασης είναι ό, τι θέλω να είναι. 764 00:44:57,310 --> 00:45:02,430 >> Αλλά να θυμάστε ότι αυτό που είμαι υλοτομία με, έτσι ώστε αυτή η σύνδεση 765 00:45:02,430 --> 00:45:04,850 προτροπή, είναι κάποιο πρόγραμμα. 766 00:45:04,850 --> 00:45:07,910 Είναι κάποιο πρόγραμμα που ήταν γραμμένο από κάποιο πρόσωπο. 767 00:45:07,910 --> 00:45:13,250 Και έτσι, το πρόσωπο αυτό, αν είναι ιδιαίτερα κακόβουλο, θα μπορούσαν 768 00:45:13,250 --> 00:45:17,780 έχουν πει, εντάξει, οπότε αν ο κωδικός ότι μπαίνω είναι ίση με μου 769 00:45:17,780 --> 00:45:22,800 πραγματικό κωδικό πρόσβασης, ή να είναι ίση σε κάποιο ειδικό κωδικό πρόσβασης - 770 00:45:22,800 --> 00:45:25,550 Ο David είναι φοβερό ή κάτι τέτοιο - 771 00:45:25,550 --> 00:45:27,190 Στη συνέχεια τους άφησαν να μπω 772 00:45:27,190 --> 00:45:33,760 Έτσι, ένας κακόβουλος προγραμματιστής θα μπορούσε να έχει πρόσβαση σε όλα τα Macs σας, ή 773 00:45:33,760 --> 00:45:36,150 Παράθυρα, ή οτιδήποτε. 774 00:45:36,150 --> 00:45:41,980 >> Έτσι, αυτό δεν είναι πολύ από μια ανησυχία, δεδομένου ότι, Θέλω να πω, αυτό είναι το login πρόγραμμα 775 00:45:41,980 --> 00:45:48,720 αυτό είναι που αποστέλλονται με το OS X, εκατοντάδες ή χιλιάδες άνθρωποι έχουν 776 00:45:48,720 --> 00:45:50,020 αξιολόγηση αυτού του κώδικα. 777 00:45:50,020 --> 00:45:55,330 Και έτσι, αν, στον κώδικα σας κάπου, θα να πω αν αυτή η σειρά ισούται ισούται 778 00:45:55,330 --> 00:45:58,860 Ο David είναι φοβερό, login, τότε κάποιος είναι πρόκειται να είναι, όπως, περιμένετε. 779 00:45:58,860 --> 00:45:59,800 Αυτό δεν είναι σωστό. 780 00:45:59,800 --> 00:46:01,790 Αυτό δεν πρέπει να είναι εδώ. 781 00:46:01,790 --> 00:46:06,650 Έτσι, αυτός είναι ένας τρόπος για να βάλουμε τα πράγματα να είναι το είδος του ασφαλούς. 782 00:46:06,650 --> 00:46:10,300 >> Αλλά σκεφτείτε ακόμη και προγράμματα ότι έχετε γράψει. 783 00:46:10,300 --> 00:46:13,000 Ας υποθέσουμε ότι έχεις γράψει το πρόγραμμα login. 784 00:46:13,000 --> 00:46:20,440 Έτσι, αυτό το πρόγραμμα σύνδεσης που γράψατε, οπότε προφανώς, θα είναι μια καλή 785 00:46:20,440 --> 00:46:21,210 προγραμματιστής. 786 00:46:21,210 --> 00:46:25,610 Δεν πρόκειται να θέσει οποιοδήποτε κακόβουλο αν το x είναι ίσο ισούται David είναι φοβερό 787 00:46:25,610 --> 00:46:27,860 στον κώδικα σας. 788 00:46:27,860 --> 00:46:31,930 Αλλά αυτό το πρόγραμμα, τι θα κάνεις χρησιμοποιούν για την κατάρτιση αυτού του προγράμματος; 789 00:46:31,930 --> 00:46:34,180 Κάτι σαν Clang. 790 00:46:34,180 --> 00:46:38,460 Τι κι αν το πρόσωπο που έτυχε να γράψτε Clang ειδική περικλείεται σε Clang 791 00:46:38,460 --> 00:46:44,310 κάτι σαν, αν είμαι κατάρτιση του login προγράμματος, και στη συνέχεια εισάγετε τον κωδικό αυτό 792 00:46:44,310 --> 00:46:49,720 στο πρόγραμμα σύνδεσης που λέει, αν x ισούται ισούται David είναι φοβερό; 793 00:46:49,720 --> 00:46:59,890 Έτσι, δεν είναι αρκετά ακόμα, αλλά έχουμε την ίδια εκδίδει εδώ, όπου Clang, καλά, 794 00:46:59,890 --> 00:47:03,790 χιλιάδες, αν όχι δεκάδες χιλιάδες άνθρωποι, έχουν κοίταξε Clang, έχουν 795 00:47:03,790 --> 00:47:07,160 εξέτασε τις γραμμές του κώδικα και είπε, Εντάξει, δεν υπάρχει τίποτα κακό εδώ. 796 00:47:07,160 --> 00:47:10,680 Προφανώς, κανείς δεν κάνει τίποτα αυτό το κακόβουλο. 797 00:47:10,680 --> 00:47:15,780 >> Αλλά τι είναι η ίδια κλαγγή, όπως, τι κι αν κάνω compile Clang; 798 00:47:15,780 --> 00:47:20,900 Τι γίνεται αν έχω κάποια compiler που καταρτίζει Clang που εισάγει στο Clang 799 00:47:20,900 --> 00:47:25,610 αυτό το ειδικό hack που λέει, εντάξει, όταν καταρτίζουν Clang, τότε η 800 00:47:25,610 --> 00:47:31,290 εκτελέσιμο παίρνω πρέπει ειδικά να εξετάσουμε στο εσωτερικό του προγράμματος login και το ένθετο 801 00:47:31,290 --> 00:47:34,230 αυτός ο κωδικός πρόσβασης, ισούται με ίσους Ο Dave είναι φοβερό; 802 00:47:34,230 --> 00:47:37,990 Έτσι, να θυμάστε ότι το ίδιο compiler σας πρέπει να καταρτίζονται σε κάποιο σημείο. 803 00:47:37,990 --> 00:47:42,810 Έτσι, αν το τι θα επιλέξετε για την κατάρτιση Clang με, το ίδιο είναι κακόβουλο, τότε θα 804 00:47:42,810 --> 00:47:45,580 θα μπορούσε να βιδωθεί το σύνολο τρόπο κάτω από τη γραμμή. 805 00:47:45,580 --> 00:47:49,630 >> Μέχρι εδώ, έχουμε Ken Thompson και Dennis Ritchie. 806 00:47:49,630 --> 00:47:53,780 Έτσι, αυτό είναι μια εικονική φωτογραφία. 807 00:47:53,780 --> 00:47:55,470 Dennis Ritchie είναι στα δεξιά. 808 00:47:55,470 --> 00:47:58,740 Αυτός είναι ένας σημαντικός - 809 00:47:58,740 --> 00:48:03,640 λίγο πολύ έγραψε C. Έτσι, μπορείτε να Τον ευχαριστώ γι 'αυτή την κατηγορία. 810 00:48:03,640 --> 00:48:04,840 Ken Thomson είναι στα αριστερά. 811 00:48:04,840 --> 00:48:07,780 Οι δυο τους έγραψαν βασικά UNIX. 812 00:48:07,780 --> 00:48:10,140 Λοιπόν, ήταν σημαντικοί συνεισφέροντες στο UNIX. 813 00:48:10,140 --> 00:48:11,310 Υπήρχαν μερικά άλλα. 814 00:48:11,310 --> 00:48:16,240 Έτσι ο Ken Thompson, σε κάποιο σημείο, κερδίζει το βραβείο Turing. 815 00:48:16,240 --> 00:48:20,860 Και το βραβείο Turing, έχω ακούσει πάντα να αναφέρεται με αυτόν τον τρόπο, είναι το 816 00:48:20,860 --> 00:48:23,100 Νόμπελ της επιστήμης των υπολογιστών. 817 00:48:23,100 --> 00:48:27,500 >> Έτσι, κατά το Βραβείο Turing, έχει να δώσει την ομιλία αποδοχής του. 818 00:48:27,500 --> 00:48:31,790 Και δίνει αυτό το πολύ διάσημη ομιλία τώρα, που ονομάζεται Σκέψεις για Εμπιστοσύνη 819 00:48:31,790 --> 00:48:35,620 Trust, το οποίο έχουμε συνδέονται να στην ιστοσελίδα του μαθήματος. 820 00:48:35,620 --> 00:48:41,670 Και σε αυτή την ομιλία, λέει, εντάξει, έτσι έγραψα UNIX, και τώρα όλοι 821 00:48:41,670 --> 00:48:43,320 εσείς οι άνθρωποι χρησιμοποιούν UNIX. 822 00:48:43,320 --> 00:48:46,960 Τώρα, να θυμάστε ότι το Linux σήμερα είναι άμεσος απόγονος του UNIX. 823 00:48:46,960 --> 00:48:50,140 OS X χρησιμοποιεί άμεσα UNIX. 824 00:48:50,140 --> 00:48:53,810 Τα Windows δεν κάνει τόσα πολλά, αλλά πολλά ιδεών ελήφθησαν από το UNIX. 825 00:48:53,810 --> 00:48:59,220 >> Έτσι, ανεβαίνει στη σκηνή και λέει, Εντάξει, έγραψα UNIX. 826 00:48:59,220 --> 00:49:03,940 Και ακριβώς έτσι εσείς ξέρετε, είμαι είναι σε θέση να συνδεθείτε σε κάθε 827 00:49:03,940 --> 00:49:05,590 ένα από τους υπολογιστές σας. 828 00:49:05,590 --> 00:49:14,280 Επειδή έβαλα μία από αυτές τις ειδικές, αν x ισούται ισούται Ken Thomson είναι φοβερό, 829 00:49:14,280 --> 00:49:16,350 τότε επιτρέπεται να κάνω login. 830 00:49:16,350 --> 00:49:18,370 Έτσι, οι άνθρωποι είναι όπως, επίσης, Πως το κάνεις αυτό; 831 00:49:18,370 --> 00:49:21,090 Κοιτάξαμε το πρόγραμμα σύνδεσης και τίποτα δεν είναι εκεί. 832 00:49:21,090 --> 00:49:24,700 Είναι σαν, λοιπόν, το τροποποιημένο compiler να συνδεθείτε στο πρόγραμμα σύνδεσης 833 00:49:24,700 --> 00:49:30,490 έτσι ώστε το πρόγραμμα εισόδου θα έχουν τώρα ότι το x ισούται ισούται Ken Thompson 834 00:49:30,490 --> 00:49:31,700 είναι φοβερό. 835 00:49:31,700 --> 00:49:33,120 >> Και λένε, καλά, αυτό δεν είναι αλήθεια. 836 00:49:33,120 --> 00:49:35,740 Κοιτάμε τον compiler, και η compiler δεν έχει γραμμές 837 00:49:35,740 --> 00:49:36,400 κώδικα όπως αυτό. 838 00:49:36,400 --> 00:49:40,540 Είναι σαν, εντάξει, αλλά τι είσαι την κατάρτιση του compiler με; 839 00:49:40,540 --> 00:49:44,810 Και νομίζουν, και αυτός είναι, όπως, επίσης, Είμαι αυτός που σας έδωσε ο compiler 840 00:49:44,810 --> 00:49:50,580 που χρησιμοποιείτε για να καταρτίσει τον compiler, έτσι είστε σύνταξη ενός compiler, ότι 841 00:49:50,580 --> 00:49:56,390 το ίδιο είναι κακόβουλο, και θα σπάσει το πρόγραμμα login. 842 00:49:56,390 --> 00:49:59,360 Έτσι, βασικά, σε εκείνο το σημείο, δεν υπάρχει κανένας τρόπος που θα μπορούσαμε να εξετάσουμε την πηγή 843 00:49:59,360 --> 00:50:02,450 κώδικα του προγράμματος login για να δούμε τι είναι λάθος. 844 00:50:02,450 --> 00:50:04,220 Δεν θα μπορούσε ακόμη και να δούμε στο πηγαίο κώδικα του μεταγλωττιστή 845 00:50:04,220 --> 00:50:06,790 για να δούμε τι είναι λάθος. 846 00:50:06,790 --> 00:50:11,940 >> Θα πρέπει να εξετάσουμε το μηχάνημα κώδικα, το πραγματικό δυαδικό του 847 00:50:11,940 --> 00:50:16,760 καταρτίζονται compiler να δείτε, περιμένετε, οι γραμμές κώδικα δεν πρέπει να είναι εδώ. 848 00:50:16,760 --> 00:50:22,130 Αλλά ο Ken Thompson πήρε ένα βήμα περαιτέρω και είπε, επίσης, ότι υπάρχουν 849 00:50:22,130 --> 00:50:25,980 αυτά τα ειδικά προγράμματα που πραγματικά σας βοηθήσει να διαβάσετε το δυαδικό των προγραμμάτων, 850 00:50:25,980 --> 00:50:29,340 και έτσι αν κάποιος χρησιμοποίησε αυτό το πρόγραμμα για την διαβάσετε το δυαδικό, θα δείτε αυτά 851 00:50:29,340 --> 00:50:30,490 γραμμές κώδικα. 852 00:50:30,490 --> 00:50:34,020 Τροποποίησε τα προγράμματα αυτά να πω, όλα Εντάξει, αν ψάχνετε κατά τη 853 00:50:34,020 --> 00:50:38,460 compiler, δεν παρουσιάζουν αυτό το συγκεκριμένο σύνολο των εκτελέσιμων. 854 00:50:38,460 --> 00:50:42,830 >> Έτσι, τότε θα πρέπει να λάβει ότι ένα βήμα περαιτέρω και ουσιαστικά, ότι θα μπορούσαν να έχουν 855 00:50:42,830 --> 00:50:46,210 λαμβάνονται πολλαπλά επίπεδα indirection, και σε κάποιο σημείο, κανείς δεν είναι πραγματικά 856 00:50:46,210 --> 00:50:47,990 πρόκειται να είναι ο έλεγχος. 857 00:50:47,990 --> 00:50:52,590 Έτσι, το ηθικό δίδαγμα της ιστορίας είναι, είστε δεν πρόκειται να γράφει 858 00:50:52,590 --> 00:50:54,340 Κλαγγή σε αυτή την κατηγορία. 859 00:50:54,340 --> 00:50:57,020 Θα πάμε να χρησιμοποιούν αναρρίχηση Κλαγγή πολλά σε αυτή την κατηγορία. 860 00:50:57,020 --> 00:51:00,490 Για όλα τα ξέρετε, Clang είναι ένα κακόβουλο πρόγραμμα που έχει σαμποτάρει κάθε 861 00:51:00,490 --> 00:51:03,520 ενιαίο πρόγραμμα που έχετε συντάξει ποτέ. 862 00:51:03,520 --> 00:51:08,206 Και για να σας αφήσει σε αυτό το πολύ δυσοίωνο Σημειώστε, μπορείτε να δείτε την Τετάρτη. 863 00:51:08,206 --> 00:51:10,030 >> [Χειροκροτήματα] 864 00:51:10,030 --> 00:51:12,935 >> ΟΜΙΛΗΤΗΣ 2: Στην επόμενη CS50. 865 00:51:12,935 --> 00:51:14,580 >> ΟΜΙΛΗΤΗΣ 3: Μην τολμήσεις να το πεις αυτό. 866 00:51:14,580 --> 00:51:15,930 Μπορείτε να το κάνετε αυτό. 867 00:51:15,930 --> 00:51:19,440 Έχετε κάνει πριν από αυτό, μπορείτε να το κάνετε αυτό Σήμερα, μπορείτε να το κάνετε αυτό αύριο. 868 00:51:19,440 --> 00:51:20,930 Έχετε κάνει αυτό για χρόνια. 869 00:51:20,930 --> 00:51:22,790 Απλά πηγαίνετε εκεί και να το κάνουμε αυτό. 870 00:51:22,790 --> 00:51:24,310 Μπορείτε να το κάνετε αυτό. 871 00:51:24,310 --> 00:51:26,102 >> [Παίζει μουσική]