[ΜΟΥΣΙΚΗ ΠΑΙΖΟΝΤΑΣ] DAVID J. MALAN: Εντάξει. Αυτό είναι CS50, και αυτό είναι το τέλος της εβδομάδας 2. Έτσι, σήμερα, θα πάμε να συνεχίσει το βλέμμα μας πώς θα εκπροσωπεί τα πράγματα κάτω από το hood-- κινείται μακριά από τους αριθμούς, όπως ακέραιοι και τιμές κινητής υποδιαστολής και εστιάζοντας στις χορδές και τελικά πιο ενδιαφέροντα προγράμματα. Αλλά, επίσης, θα ρίξουμε μια ματιά σε ένα δυο συγκεκριμένους τομείς problems-- η πρώτη από τις οποίες θα να αφορούν την κρυπτογραφία, η τέχνη της κρυπτογράφησης πληροφοριών, στην οποία βλέπετε παραπάνω εδώ είναι μια εικόνα του Radio Orphan Annie του μυστικό δαχτυλίδι αποκωδικοποιητή από χτες. Αυτό είναι πραγματικά πολύ πρωτόγονη μορφή και το παιδί-φιλική μορφή cryptopgraphy σύμφωνα με την οποία αυτός ο δακτύλιος έχει δύο disks-- ένα εσωτερικό και ένα εξωτερικό. Και περιστρέφοντας ένα από αυτά, μπορείτε να ουσιαστικά παρατάξει γράμματα όπως Α μέσω Z με άλλα γράμματα όπως Β έως Α Με άλλα λόγια, μπορείτε κυριολεκτικά να περιστρέψετε το αλφάβητο, έτσι έρχονται με μια χαρτογράφηση από επιστολές σε επιστολές, έτσι ώστε, αν θέλησε να στείλει ένα μυστικό μήνυμα σε κάποιον σαν Annie, θα μπορούσατε να γράψετε κάτω το μήνυμά σας και, στη συνέχεια, περιστρέψτε τα γράμματα, σύμφωνα με την οποία, αν εννοείς να πει "Α", μπορείτε αντ 'αυτού να πω "B" μπορείτε να πω "B" μπορείτε, αντί να πω "C" - ή κάτι λίγο πιο έξυπνοι από αυτό-- και, στη συνέχεια, τελικά, εφ 'όσον Annie έχει έναν αποκωδικοποιητή δακτύλιο, που μπορεί να αποκωδικοποιήσει το μήνυμα. Τώρα, ίσως θυμάστε, στην πραγματικότητα, ότι αυτό χρησιμοποιήθηκε σε μια πολύ γνωστή ταινία ότι παίζει nauseum διαφημίσεων κατά τη διάρκεια της την περίοδο των Χριστουγέννων. Ας ρίξουμε μια ματιά εδώ. Ralphie PARKER: "Είτε πρόκειται για γνωστό σε όλους στην περίληψη ότι Ralph Parker διορίζεται ένα μέλος της Μικρής ορφανά Annie Secret Circle και δικαιούται να επικαλείται όλα τα τιμητικές διακρίσεις και τα οφέλη που συμβαίνουν σ 'αυτό. " Ralphie PARKER (Διήγηση): Υπεγράφη Μικρή ορφανά Annie. Προσυπογράφονται, Pierre Andre! Σε μελάνι. Διακρίσεις και τα οφέλη, ήδη στην ηλικία των εννέα. [ΜΟΥΣΙΚΗ ΠΑΙΖΟΝΤΑΣ] [RADIO CHATTER] Ralphie PARKER: Έλα. Ας προχωρήσουμε με αυτό. Δεν χρειάζεται όλη αυτή η τζαζ για τους λαθρεμπόρους και τους πειρατές. Εκφωνήτρια σε ραδιοφωνικό σταθμό: Ακούστε αύριο νύχτα για την περιπέτεια καταληκτική των The Black Pirate Ship. Τώρα, ήρθε η ώρα για την Annie του Μυστικό μήνυμα για εσάς τα μέλη του Secret Circle. Θυμηθείτε τα παιδιά, μόνο τα μέλη της Annie μυστικό Circle μπορεί να αποκωδικοποιήσει το μυστικό μήνυμα της Annie. Θυμηθείτε, η Annie είναι ανάλογα με σας. Ρυθμίστε τις ακίδες στο Β-2. Εδώ είναι η message-- 12, 11, 2-- Ralphie PARKER (Διήγηση): I είμαι στην πρώτη μου μυστική συνάντηση. RADIO ΝΗΤΗΣ: --25, 14, 11, 18, 16-- Ralphie PARKER (Διήγηση): Ω, Pierre ήταν σε μεγάλη φωνή απόψε. Θα μπορούσα να πω ότι απόψε το μήνυμα ήταν πολύ σημαντικό. RADIO ΝΗΤΗΣ: --3, 25. Αυτό είναι ένα μήνυμα από την Annie τον εαυτό της. Θυμηθείτε, μην το πω σε κανέναν. [Ασθμαίνοντας] Ralphie PARKER (Διήγηση): Ενενήντα δευτερόλεπτα αργότερα, είμαι το μόνο δωμάτιο στο σπίτι όπου ένα αγόρι εννέα θα μπορούσε να καθίσει στην προστασία της ιδιωτικής ζωής και να αποκωδικοποιήσει. Ah. "Β" [Συγκρατημένα γέλια] Ralphie PARKER (Διήγηση): Πήγα στο επόμενο. "Ε" Η πρώτη λέξη είναι το "είναι". Ναι! Θα ερχόταν πιο εύκολο τώρα. "ΚΑ" [Συγκρατημένα γέλια] RANDY PARKER: Aw, έλα, Ralphie. Πρέπει να φύγω! Ralphie PARKER: Θα είμαι κάτω, Ma. Gee σφυρίζω. "Τ" "Ο" "Να είστε βέβαιος να. "" Να είστε βέβαιος να "τι; Ποια ήταν Μικρή ορφανά Annie προσπαθώ να πω; "Να είστε βέβαιος να" τι; ΜΗΤΕΡΑ: Ralphie, Randy έχει να πάει. Θα σας παρακαλούσα να βγει; Ralphie PARKER: Εντάξει, μαμά! Θα είμαι δεξιά έξω! Ralphie PARKER (Διήγηση): Ήμουν όλο και πιο κοντά τώρα. Η ένταση ήταν φοβερή. Τι ήταν αυτό; Η μοίρα του πλανήτη μπορεί να βρίσκονται σε κίνδυνο. ΜΗΤΕΡΑ: Ralphie, Randy πήρε για να πάει! Ralphie PARKER: Θα ήταν σωστό έξω, για να φωνάξει δυνατά! Ralphie PARKER (Διήγηση): Σχεδόν εκεί! Τα δάχτυλά μου πέταξε! Το μυαλό μου ήταν μια παγίδα χάλυβα. Κάθε πόρων δονείται. Ήταν σχεδόν σαφές! Ναι! Ναι! Ναι! Ναι! Ralphie PARKER: "Να είστε βέβαιος να πίνουν Ovaltine σας. " Ovaltine; Ένα φτηνό εμπορικό; [ΜΟΥΣΙΚΗ ΠΑΙΖΟΝΤΑΣ] Ralphie PARKER: Κάθαρμα. [Γέλια] DAVID J. MALAN: Έτσι ώστε, στη συνέχεια, είναι μια ματιά στο τι κρυπτογραφία μπορεί να είναι για μια Αυτό-- πίνουν από χτες. Έτσι, μια γρήγορη ανακοίνωση. Αν είστε ελεύθεροι αυτό Παρασκευή στις 13:15 και θα ήθελαν να ενωθούν μαζί μας για CS50 μεσημεριανό γεύμα, το κεφάλι σε αυτό το URL εδώ. Πρώτα έρχονται, πρώτο σερβίς ως συνήθως. Αλλά με την πάροδο του χρόνου, θα βεβαιωθείτε ότι πιο όποιον θα ήθελε να συμμετάσχει μπορεί να προγραμματίσει-σοφός. Έτσι χορδές. Έχουμε Zamyla-- οποίους έχετε συναντήσει τώρα πιο πιθανό στο πρόβλημα Set 1-- των οποίων ορθογραφία του ονόματος είναι έτσι. Και ας υποθέσουμε ότι έχετε πληκτρολογήσει το όνομά της σε ένα πρόγραμμα υπολογιστή που είναι χρησιμοποιώντας κάτι σαν GetString. Προκειμένου να ανακτηθούν αυτές τις πληκτρολογήσεις, πώς πάμε για εκπροσωπεί ένα εγχόρδων, μια λέξη, μια παράγραφο, ή πολλά γράμματα όπως αυτά εδώ; Μιλήσαμε για τελευταία φορά ακέραιοι και προβλήματα που προκύπτουν με υπερχείλιση ακεραίου και τιμές κινητής υποδιαστολής και τα προβλήματα που προκύπτουν μέσα στην ακρίβεια. Με χορδές, εμείς τουλάχιστον έχουν λίγο μεγαλύτερη ευελιξία επειδή strings-- μόνο στον πραγματικό world-- μπορεί να είναι ένα αρκετά αυθαίρετο μήκος. Αρκετά μικρό, πολύ καιρό. Αλλά ακόμα και τότε, θα πάμε να βρίσκουν ότι οι υπολογιστές μπορεί μερικές φορές να ξεμείνει από μνήμη και όχι ακόμη αποθηκεύσει ένα αρκετά μεγάλο κορδόνι. Αλλά για τώρα, ας αρχίσουμε να απεικονίσει ένα string ως κάτι σε αυτά τα κουτιά εδώ. Έτσι, έξι τέτοια κιβώτια, το καθένα από τα οποία αντιπροσωπεύει ένα χαρακτήρα ή «χαρακτήρας». Έτσι, υπενθυμίζουν ότι "char" - c-h-a-r-- είναι μία από τις ενσωματωμένες σε τύπους δεδομένων σε C. Και τι ωραίο είναι ότι μπορείτε να χρησιμοποιήσετε ότι το είδος του ως δομικό στοιχείο, ένα κομμάτι του παζλ, αν θέλετε, για να σχηματίσει ένα μεγαλύτερο είδος των δεδομένων που θα συνεχίσουν να καλέσει ένα "string". Τώρα, τι είναι χρήσιμο για τη σκέψη σχετικά με τα πράγματα όπως χορδές με αυτόν τον τρόπο; Λοιπόν, αποδεικνύεται ότι μπορούμε πραγματικά μόχλευση αυτή τη δομή να έχουν πρόσβαση στην πραγματικότητα μεμονωμένους χαρακτήρες σε ένα αρκετά απλό τρόπο. Πάω να πάει μπροστά και να δημιουργήσει ένα αρχείο που ονομάζεται "stringzero.c," αλλά μπορείτε να καλέσετε ό, τι θέλετε. Και στην ιστοσελίδα του μαθήματος είναι ήδη το παράδειγμα αυτό εκ των προτέρων, έτσι ώστε να μην χρειάζεται να πληκτρολογήστε τα πάντα. Και Πάω να προχωρήσει και κάνουμε πρώτα int main κενό. Και μέσα σε λίγες ημέρες, θα αρχίσουμε να δώσουμε έμφαση, εκτός τι άκυρο είναι εδώ, γιατί είναι int δίπλα στην κύρια, και ούτω καθεξής. Αλλά για τώρα, ας συνεχίσουμε να αντιγράψετε επικολλήσετε αυτό. Πάω να κηρύξει μια σειρά που ονομάζεται s. Και Πάω να επιστρέψει από GetString ανεξάρτητα από τους τύπους χρηστών στο. Αυτό πρόκειται να είναι μια απλή πρόγραμμα, υπάρχουν οδηγίες, Είμαι ακριβώς πρόκειται να τυφλά Αναμένουμε ότι ο χρήστης γνωρίζει τι πρέπει να κάνετε για να το κρατήσετε απλό. Και τώρα θα πάω να έχει ένα βρόχο. Και στο εσωτερικό του για βρόχο μου, είμαι πρόκειται να έχουν int i παίρνει μηδέν. Και εγώ είναι, και πάλι, απλά μια σύμβαση, μια μεταβλητή δείκτη για τη μέτρηση, αλλά θα μπορούσα να ονομάσω αυτό ό, τι θέλω. Πάω να κάνω εγώ είναι λιγότερο than-- καλά Το όνομά Zamyla είναι μακρύ έξι γράμματα. Έτσι, Πάω στο σκληρό κώδικα ότι εκεί τώρα. Και τότε εγώ ++. Και τώρα μέσα από αυτά τα σγουρά τιράντες Πάω να κάνω printf, και θέλω να εκτυπώσετε ένα χαρακτήρα σε ένα χρόνο. Έτσι, Πάω να χρησιμοποιήσει% c για ίσως η πρώτη φορά. Και τότε θέλω να εκτυπώσετε κάθε χαρακτήρα στη δική του γραμμή. Έτσι, Πάω να θέσει ένα λίγο backslash n εκεί. Κλείστε απόσπασμα. Και τώρα θέλω να κάνω κάτι εδώ. Θέλω να εκτυπώσετε το συγκεκριμένο γράμμα στη σειρά, s, όπως είμαι επανάληψη από μηδέν έως έξι. Με άλλα λόγια, θέλω να εκτυπώσετε το ί-οστό χαρακτήρα του s. Τώρα, πώς μπορώ να κάνω αυτό; Καλά μοιάζει πολύ με τα κουτιά αυτή η παράσταση εδώ, είδος, πλάθω την έννοια του μποξ γράμματα, μπορείτε να το κάνετε, ομοίως, ότι συντακτικά σε C από απλά διευκρινίζοντας, Θέλω να εκτυπώσετε s του ί-οστό χαρακτήρα. Χρησιμοποιώντας τις αγκύλες στο πληκτρολόγιο του υπολογιστή σας ότι σε ένα πληκτρολόγιο ΗΠΑ είναι γενικά πάνω από το πλήκτρο επιστροφής σας. Έτσι, αυτό δεν είναι απόλυτα σωστό αλλά, όπως ίσως έχετε παρατηρήσει. Αλλά Πάω με το είδος της τυφλά προχωρήσουμε εδώ. Και Πάω να κάνουν κορδόνι 0. Αλλά πριν το κάνω αυτό, ας δούμε αν μπορούμε δεν μπορεί να προβλέψει κάποια κοινά λάθη. Είναι αυτό πρόκειται να καταρτίσει; Όχι, είμαι λείπει ένα σωρό πράγματα. Βιβλιοθήκες άκουσα. Έτσι που header αρχεία ίσως θέλω να προσθέσω εδώ; Ναι. ΚΟΙΝΟ: Χρειάζεται πρότυπο I / O [δεν ακούγεται] DAVID J. MALAN: Εξαιρετική. Γι 'αυτό χρειάζεται πρότυπο I / O. Για ό, τι Σκοπός θέλω πρότυπο I / O; Για printf. Έτσι περιλαμβάνουν stdio.h. Και σας προτείνω επίσης ότι περιλαμβάνουν η βιβλιοθήκη CS50 για ποιο λόγο; Για να έχουν χορδές. Έτσι θα δούμε τι Βιβλιοθήκη CS50 είναι να κάνει για να δημιουργήσει αυτήν την έννοια μιας συμβολοσειράς. Αλλά για τώρα, μπορείτε να σκεφτείτε μόνο του ως ένα πραγματικό τύπο δεδομένων. Έτσι ώστε να φαίνεται να είναι λίγο καθαριστεί. Και τώρα είμαι πρόκειται να πάει μπροστά και μάλιστα κάνουν εγχόρδων 0. Καταρτίζονται. Έτσι, αυτό είναι καλό. Έτσι ./string0 επιτρέψτε μου να μεγεθύνετε ώστε να μπορούμε να δείτε πιο προσεκτικά τι συμβαίνει. Enter. Ζ-Α-Μ-Υ-L-Α εισέλθουν. Και έχουμε εκτυπώνονται στο όνομα Zamyla του. Έτσι, αυτό είναι πολύ καλό. Έτσι, τώρα ας πάμε μπροστά και να εκτελέστε ξανά το πρόγραμμα αυτό, και πληκτρολογήστε το πλήρες όνομα Daven του. Έκπληξη, έκπληξη. Enter. Χμμ. Δεν έχουν εκτυπωθεί Daven του πλήρες όνομα σωστά. Τώρα, αυτό πρέπει να είναι προφανές σε Εκ των υστέρων, λόγω του ό, τι, είδος, ηλίθια απόφαση design; Ναι, εγώ σκληρά κωδικοποιημένους η έξι μέσα μου για βρόχο. Τώρα το έκανα μόνο και μόνο επειδή Ήξερα όνομα Zamyla του επρόκειτο να είναι έξι γράμματα. Αλλά σίγουρα αυτό δεν είναι μια γενική λύση. Έτσι αποδεικνύεται μπορούμε δυναμικά καταλάβω το μήκος μιας συμβολοσειράς καλώντας μια συνάρτηση που ονομάζεται strlen. Και πάλι, σκόπιμα συνοπτικά ονομάζεται απλά για να γίνει πιο βολικό να πληκτρολόγηση. Αλλά αυτό είναι συνώνυμο με όλο το μήκος μιας συμβολοσειράς. Πάω να πάει πίσω στο τερματικό μου παράθυρο και επαναληπτικές τον compiler. Αλλά φωνάζει σε μένα. Εμμέσως δηλώνοντας τη λειτουργία της βιβλιοθήκης strlen με τον τύπο unsigned int const-- Είμαι χαμένη. Εντελώς. Έτσι, ειδικά όπως σας τα μάτια αρχίζουν να γλάσο πάνω με τα μηνύματα λάθους όπως αυτό, εστίαση ειλικρινά για τις πρώτες λίγες λέξεις. Γνωρίζουμε ότι το πρόβλημα είναι στο γραμμή 8, όπως αναφέρεται εδώ. Και αυτό είναι το κορδόνι-0.c. Εμμέσως δηλώνοντας λειτουργία της βιβλιοθήκης strlen. Έτσι ώστε να είναι γενικά πρόκειται να είναι ένα πρότυπο των μηνυμάτων λάθους. Εμμέσως δηλώνοντας κάτι. Έτσι, με λίγα λόγια, ό, τι έχω φάνηκε να έχουν γίνει σε σχέση με τη γραμμή 8, εδώ. Τι θα μπορούσε να είναι η λύση να είναι ακόμη αν δεν έχετε χρησιμοποιήσει ποτέ strlen τον εαυτό σας; ΚΟΙΝΟ: Μέρος της μια διαφορετική βιβλιοθήκη; DAVID J. MALAN: Μέρος από μια διαφορετική βιβλιοθήκη. Γι 'αυτό έχει δηλωθεί, να το πω έτσι. Αναφέρεται σε κάποιο αρχείο εκτός από stdio.h και CS50.h. Τώρα πού είναι αυτό ορίζεται; Για να είμαι ειλικρινής, θα πρέπει είτε να απλά το γνωρίζουν αυτό από την κορυφή του κεφαλιού σας, ή έχετε το Google αυτό και να το μάθετε. Ή το γνωρίζουν αυτό, έχω ανοίξει το CS50 συσκευής το πρόγραμμα τερματικού, το οποίο είναι ακριβώς το μεγάλο, έκδοση πλήρους οθόνης της τι είναι στο κάτω μέρος του παραθύρου του gedit. Και αποδεικνύεται ότι υπάρχει μια ομοίως συνοπτική εντολή, που ονομάζεται άνθρωπος για χειροκίνητη, όπου κι αν πληκτρολογήσετε το όνομα της συνάρτησης και να πατήσετε το Enter, θα πάρετε πίσω αρκετά απόκρυφες τεκμηρίωση. Είναι ακριβώς το κείμενο που γενικά μοιάζει λίγο κάτι σαν αυτό. Είναι λίγο συντριπτική με την πρώτη ματιά. Αλλά ειλικρινά Πάω να αφήστε τα μάτια μου γλάσο πάνω και να επικεντρωθεί μόνο στο τμήμα Με νοιάζει προς το παρόν. Ποια είναι αυτή. Πράγμα που μοιάζει δομικά όπως κάτι που είμαι εξοικειωμένος με. Πράγματι, η σελίδα man, έτσι να μιλήσει, θα σας πω σε ποια header αρχείο λειτουργία σαν strlen ορίζεται. Έτσι, Πάω να επιστρέψω τώρα στο gedit. Και Πάω να προχωρήσει και προσθέσετε εδώ #include και να αποθηκεύσετε το αρχείο. Πάω να καθαρίσετε την οθόνη με Έλεγχος L Εάν έχετε αναρωτηθεί. Και Πάω να ξανατρεχτεί make string.0, καταρτίζει αυτή τη φορά. ./string.0 Zamyla. Αυτό φάνηκε να λειτουργεί Επιτρέψτε μου να πάω μπροστά και να επαναπροσδιορίζονται με Davenport. Enter. Και αυτό, επίσης, φάνηκε να λειτουργεί. Έτσι, μπορούμε να κάνουμε λίγο καλύτερο από αυτό, όμως, μπορούμε να αρχίσουμε να τακτοποιημένο πράγματα Κάνε λίγο λίγο. Και Πάω να πραγματικά εισαγάγει ένα άλλο πράγμα τώρα. Πάω να προχωρήσει και αποθηκεύσετε αυτή σε ένα διαφορετικό αρχείο. Και Πάω να καλέσετε Αυτό string1.c αρχείο μόνο να είναι συνεπής με τον κώδικα θα είστε σε θέση να βρείτε online. Και ας επικεντρωθεί σε σχετικά ακριβώς τον ίδιο κωδικό. Αποδεικνύεται ότι έχω ήταν το είδος της ανάληψης δεδομένο το γεγονός ότι το laptop μου, και με τη σειρά της, η συσκευή CS50 έχει πολλή μνήμη, πολλά RAM, πολλά byte του χώρου στην οποία μπορεί να αποθηκεύσει χορδές. Αλλά η πραγματικότητα αν πληκτρολογήσει καιρό αρκετά, και αρκετές πληκτρολογήσεις, Θα μπορούσα στον τύπο θεωρία σε περισσότερους χαρακτήρες από τον υπολογιστή μου έχει φυσική μνήμη. Και αυτό είναι προβληματικό. Μοιάζει πολύ με ένα int μπορεί μόνο μετρούν τόσο υψηλή, θεωρητικά, μπορείτε να χώνω μόνο τόσοι πολλοί χαρακτήρες στη μνήμη RAM του υπολογιστή σας ή Τυχαία Access Memory. Έτσι είχα καλύτερη πρόβλεψη Αυτό το πρόβλημα, ακόμα αν και θα μπορούσε να είναι μια σπάνια περίπτωση γωνία, να το πω έτσι. Δεν συμβαίνει συχνά, θα μπορούσε να συμβεί. Και αν αυτό συμβεί και εγώ δεν κάνω πρόβλεψη και πρόγραμμα για την, το πρόγραμμά μου θα μπορούσε να κάνει ποιος ξέρει τι. Freeze, κολλάει, επανεκκίνηση, οτιδήποτε. Κάτι που αναμένεται να συμβεί. Λοιπόν, τι Πάω να κάνουμε τώρα, πλέον πραγματικότητα, είναι πριν από ποτέ στα τυφλά χρησιμοποιήσετε μια μεταβλητή, όπως s ότι έχει ανατεθεί η τιμή επιστροφής της κάποια άλλη λειτουργία, όπως GetString, Πάω να βεβαιωθείτε ότι η αξία της είναι έγκυρη. Έτσι ξέρω μόνο από την ανάγνωση Τεκμηρίωση CS50 για GetString, η οποία τελικά θα σας το σημείο στο, ότι GetString επιστρέφει ένα ειδικό σύμβολο ονομάζεται NULL, Ν-U-L-L σε όλες caps, αν κάτι πάει στραβά. Έτσι, συνήθως, επιστρέφει ένα string. Αλλά κατά τα άλλα, αν επιστρέφει Ν-U-L-εγώ-- εμείς τελικά θα δούμε τι πραγματικά means-- ότι μόνο μέσα κάτι κακό συνέβη. Τώρα, αυτό σημαίνει, όπως ακριβώς και στον Scratch, Μπορώ να ελέγξετε μια κατάσταση εδώ σε C, αν s δεν είναι ίσο με NULL. Έτσι, αν δεν έχετε δει αυτό πριν, Αυτό απλά σημαίνει ότι δεν είναι ίσο με. Έτσι είναι το αντίθετο του ίση μεταξύ ίσων, η οποία, υπενθυμίζουμε, είναι διαφορετικό από ενιαίο ισούται, το οποίο είναι ανάθεση. Έτσι, αν s δεν είναι ίσο με NULL, μόνο τότε Θέλω να εκτελέσει αυτές τις γραμμές κώδικα. Έτσι με άλλα λόγια, πριν βουτήξει σε τυφλά και την επανάληψη ξεκινήσει πάνω από s, και τη θεραπεία σαν να είναι μια ακολουθία χαρακτήρες, Πάω να ελέγξει πρώτα, περιμένετε ένα λεπτό, είναι s σίγουρα δεν ίση προς αυτή την ιδιαίτερη αξία, NULL; Γιατί αν είναι, κακά πράγματα μπορούν να συμβούν. Και για τώρα, ας υποθέσουμε ότι κακά πράγματα συμβαίνει μέσα κολλάει το πρόγραμμά σας, και δεν μπορεί απαραίτητα να ανακτήσει. Έτσι, ειλικρινά, φαίνεται άσχημο. αυτό είναι το είδος της σύγχυσης τώρα να ρίξετε μια ματιά στο. Αλλά αυτό θα γίνει πιο εξοικειωμένοι πριν από καιρό. Αλλά Πάω να προτείνει τώρα μια άλλη βελτίωση. Αυτό είναι μια βελτίωση στην ορθότητα. Το πρόγραμμά μου είναι τώρα πιο σωστή, διότι στην σπάνια περίπτωση που δεν υπάρχει αρκετή μνήμη υπάρχει, θα το χειριστεί, και θα κάνω απολύτως τίποτα. Εγώ τουλάχιστον δεν θα συντριβή. Αλλά ας κάνουμε μια τελική έκδοση εδώ. Και ένα αρχείο που ονομάζεται string2.c. Πάω να επικολλήσετε ότι ίδιο κωδικό για μια στιγμή, και πάω να το τονίσω γραμμή, 11, εδώ, μόνο για μια στιγμή. Τώρα η πραγματικότητα είναι ότι οι έξυπνοι μεταγλωττιστές όπως Clang θα μπορούσε να το διορθώσω αυτό για μας πίσω από τα παρασκήνια χωρίς να μας μάθουν ποτέ. Αλλά ας σκεφτούμε αυτό ουσιαστικά ως ένα προβληματικό σχεδιασμό. Αυτή η γραμμή του κώδικα είναι, φυσικά, λέγοντας, προετοιμασία κάποια μεταβλητή i με 0. Αυτό είναι αρκετά απλή. Και τι είναι πάλι αυτό Προσωπικά, εδώ, εγώ ++, κάνει; Έχουμε δει πριν, αλλά εμείς δεν πραγματικά να μιλήσω γι 'αυτό. ΚΟΙΝΟ: Αύξησης i. DAVID J. MALAN: Αύξησης i. Έτσι, σε κάθε επανάληψη μέσα αυτό το βρόχο, σε κάθε κύκλο, είστε προσαύξηση i κατά ένα. Έτσι μεγαλώνει και μεγαλύτερες, και μεγαλύτερο μέχρι να τερματιστεί ο βρόχος. Πώς να τερματίσει; Λοιπόν υπάρχει αυτό το μεσαίο κατάσταση που έχουμε χρησιμοποιήσει στο παρελθόν. Έχετε δει και σε περάσματα στο σύνολο P. Αλλά τι είναι αυτό το ρητό; Κάντε το επόμενο βρόχο, ώστε Όσο i είναι μικρότερο από ό, τι; ΚΟΙΝΟ: Το μήκος της χορδής. DAVID J. MALAN: Η το μήκος του string. Έτσι μεταφράζεται πολύ καθαρά στην αγγλική σε αυτή την έννοια. Τώρα το πρόβλημα είναι ότι κάθε φορά που επαναλήψεις μέσω αυτού του βρόχου στη θεωρία, Είμαι αυτή την ερώτηση. Είναι i μικρότερο από το μήκος της συμβολοσειράς s; Είναι i μικρότερο από το μήκος της συμβολοσειράς s; Τώρα είναι i αλλάζει σε κάθε επανάληψη; Είναι. Λόγω της ++. Έτσι, κάθε επανάληψη i μεγαλώνει. Αλλά είναι s να πάρει μεγαλύτερο, ή μικρότερες, ή αλλάζει καθόλου; Όχι Έτσι, όσον αφορά το σχεδιασμό, ένας από τους άξονες κατά μήκος του οποίου προσπαθούμε να αξιολογήσει κώδικα στην τάξη, αυτό αισθάνεται κάπως ανόητο. Όπως είστε κυριολεκτικά, σε κάθε επανάληψη αυτού του βρόχου ζητά η ίδιο καταραμένο ερώτημα και πάλι, και ξανά, και ξανά, και κυριολεκτικά αυτό δεν πρόκειται ποτέ να αλλάξει. Τουλάχιστον αν δεν είμαι αγγίζοντας s και προσπαθεί να αλλάξει το περιεχόμενο του s. Έτσι μπορώ να κάνω λίγο καλύτερη από ό, τι αυτό. Και τι Πάω να κάνουμε δεν είναι δηλώνουν μόνο μία μεταβλητή i, αλλά μια δεύτερη μεταβλητή Θα είμαι αυθαίρετα, αλλά συμβατικά, αποκαλούν n. Εκχώρηση n ίσο με το μήκος του νήματος του s. Και στη συνέχεια, εδώ, θα πάω να κάνει ένα έξυπνο μικρό βελτιστοποίησης, έτσι να μιλήσει, ότι στο τέλος της ημέρας όχι πιο σωστή ή όχι λιγότερο σωστό είναι ό, τι πριν. Αλλά αυτό είναι ένα καλύτερο σχεδιασμό. Στο γεγονός ότι είμαι με τη χρήση λιγότερο χρόνο, λιγότερα κύκλους CPU, έτσι να μιλήσει, να απαντήσει το ίδιο ερώτημα, αλλά μόνο μία φορά. Οποιεσδήποτε ερωτήσεις σχετικά με αυτή τη γενική αρχή της βελτίωσης, λένε, η αποτελεσματικότητα ενός προγράμματος; Ναι; ΚΟΙΝΟ: Γιατί κάνετε χρησιμοποιήστε το [δεν ακούγεται]; DAVID J. MALAN: Καλή ερώτηση. Γιατί λοιπόν να θέσει το ++ στο τέλος της i αντί από την έναρξη του i; Σε αυτήν την περίπτωση, έχει Δεν λειτουργικές επιπτώσεις. Και σε γενικές γραμμές, έχω την τάση να χρησιμοποιήστε το διαχειριστή postfix έτσι ώστε να είναι λίγο πιο σαφής ως για το πότε η λειτουργία συμβαίνει. Για όσους δεν είναι εξοικειωμένοι, υπάρχει και μια άλλη καταστάσεων σύμφωνα με την οποία θα μπορούσατε να κάνετε ++ i. Αυτά είναι λειτουργικά ισοδύναμο σε αυτή την περίπτωση γιατί δεν υπάρχει τίποτα άλλο γύρω από την εν λόγω προσαύξησης. Αλλά μπορείτε να έρθετε επάνω με περιπτώσεις και γραμμές κώδικα στην οποία αυτό κάνει τη διαφορά. Έτσι, σε γενικές γραμμές, εμείς δεν κάνουμε ακόμη και να μιλήσει για αυτό. Διότι, ειλικρινά, αυτό καθιστά σας Κωδικός σέξι, και το είδος της επιτήδειος, και λιγότερους χαρακτήρες. Αλλά η πραγματικότητα είναι ότι είναι πολύ πιο δύσκολο, Νομίζω ότι, ακόμα και για μένα να τυλίξουν το μυαλό μου γύρω από αυτό μερικές φορές, η σειρά των πράξεων. Έτσι, ως ένα μέρος, αν Πραγματικά δεν μου αρέσει αυτό, ακόμα κι αν αυτό είναι το είδος της σέξι ψάχνετε, μπορείτε επίσης να κάνετε i + = 1, το οποίο είναι το πιο άσχημο έκδοση του ίδια ιδέα για το postfix προσαύξησης. Το λέω αυτό και σας θα πρέπει να κάνουν τη διασκέδαση του, αλλά θα έρθει για να δείτε τον κωδικό, όπως κάτι όμορφο πριν από καιρό. [Γέλια] DAVID J. MALAN: Σωστά; Ναι. Ερώτηση στη μέση. ΚΟΙΝΟ: Μήπως πρέπει να πούμε int n; DAVID J. MALAN: Μπορείτε να το κάνετε Δεν χρειάζεται να πω int n. Έτσι, γιατί έχουμε ήδη πει int, δεν χρειάζεται να το πω και πάλι. Η σύλληψη είναι ότι n πρέπει να είναι το ίδιο τύπο δεδομένων, όπως εγώ. Έτσι, αυτό είναι μια ευκολία εδώ. Ναι. ΚΟΙΝΟ: Μπορείτε να πάτε πάνω από το βραχίονα χαρακτήρα εκτύπωσης s i και πάλι; DAVID J. MALAN: Απολύτως. Έτσι% c, ανάκληση από την τελευταία ώρα, είναι μόνο ένα σύμβολο κράτησης θέσης. Σημαίνει βάλει ένα char εδώ. backslash n, φυσικά, μόνο μέσα θέσει ένα διάλειμμα γραμμή εδώ. Έτσι ώστε μόνο τα φύλλα, τώρα, αυτό το κομμάτι της νέας σύνταξης. Και αυτό είναι κυριολεκτικά λέγοντας, πιάσε η σειρά που ονομάζεται s και να πάει να πάρει του ί-οστό χαρακτήρα, να το πω έτσι. Και συνεχίζω λέγοντας ί-οστό χαρακτήρα επειδή σε κάθε επανάληψη αυτού του βρόχου Είναι σαν να εκτυπώνετε έξω, το πρώτο βραχίονα s 0, όπως ένας προγραμματιστής θα μπορούσε να πει. Στη συνέχεια s βραχίονα 1, τότε s στήριγμα 2, τότε 3, τότε 4. Αλλά φυσικά αυτό είναι μια μεταβλητή, γι 'αυτό ακριβώς το εκφράζουν με i. Βασικά, όμως, είναι να συνειδητοποιήσει, ειδικά αν δεν έχετε έχουν εγκλιματιστεί σε αυτόν τον κόσμο του προγραμματισμού, όπου όλα φαίνεται να μετρούν από το μηδέν, το gotta αρχίζουν να μετρούν από το μηδέν τώρα. Επειδή οι χορδές, πρώτο χαρακτήρα, η z στο Zamyla είναι προς το καλύτερο ή προς το χειρότερο πρόκειται να ζήσουν στο νούμερο θέση μηδέν. Εντάξει, οπότε επιτρέψτε μου να φέρει μας πίσω εδώ για να Zamyla και να δούμε τι πραγματικά συμβαίνει για κάτω από την κουκούλα. Έτσι υπάρχει αυτή η έννοια του τύπου χύτευσης. Μπορείτε να έχετε πραγματικά έπαιξε με αυτό που ήδη, ίσως για την χάκερ έκδοση του P που μία. Αλλά τύπος χύτευσης αναφέρεται μόνο για το ικανότητα σε C και κάποιες άλλες γλώσσες για τη μετατροπή ενός τύπου δεδομένων σε άλλο. Τώρα, πώς θα μπορούσαμε να δούμε αυτό αρκετά ευθέως; Έτσι αυτό, ανάκληση, είναι η αρχή της αγγλικής αλφαβήτου. Και το πλαίσιο, υπενθυμίζουν, από όπως και πριν από μία εβδομάδα είναι ASCII. Η American Standard Code για Ανταλλαγή Πληροφοριών. Ποια είναι απλώς ένα πραγματικά μεγάλο δρόμο του λέγοντας ότι μια χαρτογράφηση από γράμματα σε αριθμούς, και από τους αριθμούς σε γράμματα. Έτσι, ένα από εδώ M, dot dot dot, γραμμές με, ανάκληση, το δεκαδικό αριθμό 65 προς τα πάνω. Και εμείς δεν μιλάμε γι 'αυτό ρητά, αλλά σίγουρα υπάρχει παρόμοια αριθμοί για πεζά γράμματα. Και πράγματι, υπάρχουν. Ο κόσμος αποφάσισε μερικά χρόνια Πριν από λίγο ότι ένα, πεζά ένα, πρόκειται να είναι 97. Και λίγο β πρόκειται να είναι 98, και ούτω καθεξής. Και για οποιοδήποτε άλλο πλήκτρο πληκτρολογίου σας, υπάρχει πρόκειται να είναι ένα παρόμοιο μοτίβο των bits. Ή ισοδύναμα, ένας δεκαδικός αριθμός. Έτσι, το ερώτημα στο χέρι, Στη συνέχεια, είναι το πώς μπορούμε να πραγματικά να δείτε αυτό κάτω από την κουκούλα; Έτσι, Πάω να πάει πάνω στο gedit και πάλι. Και όχι τύπου αυτό το ένα από το μηδέν, Πάω να προχωρήσει και μόλις ανοίξει κάτι από το σημερινό κώδικα που ονομάζεται ASCII μηδέν. Και ASCII μηδέν μοιάζει με αυτό. Έτσι, ας τυλίξτε το μυαλό μας γύρω από αυτό. Έτσι, η πρώτη, έχω σχολίασε ο κώδικας, το οποίο είναι ωραίο. Επειδή είναι κυριολεκτικά μου λέει τι να περιμένουμε, εμφανίσει μια χαρτογράφηση για κεφαλαία γράμματα. Τώρα δεν ξέρω ακριβώς τι εννοώ με αυτό, οπότε ας συμπεράνουμε. Στην αγγλική γλώσσα, ίσως κάπως techie Αγγλικά, τι γραμμή 18 φαίνεται να κάνει για μας; Απλά γραμμή 18. Τι είναι αυτό που προκαλεί; Τι πάει να δώσει το έναυσμα εδώ; ΚΟΙΝΟ: Ένας βρόχος. DAVID J. MALAN: Ένας βρόχος. Και πόσες φορές είναι ότι πρόκειται να επαναλάβει; ΚΟΙΝΟ: [παρεμβάλλοντας ΦΩΝΕΣ] έξι φορές. DAVID J. MALAN: Δεν έξι φορές. ΚΟΙΝΟ: 26 φορές. DAVID J. MALAN: 26 φορές. Ναι, συγνώμη. 26 φορές. Γιατί; Λοιπόν, αυτό είναι λίγο περίεργο, αλλά Έχω αρχίσει να μετράει από 65. Ποια είναι παράξενο, αλλά δεν είναι λάθος. Δεν είναι κακό ας πούμε. Και κάνω ότι μόνο διότι, για αυτό το παράδειγμα, Είμαι το είδος της πρόβλεψης ότι το κεφάλαιο Α ήταν 65. Τώρα αυτό δεν είναι το πιο κομψό τρόπος για να το κάνετε αυτό, το είδος των σκληρών κώδικα εσωτερικές αξίες που κανείς δεν είναι πάντα αναμένεται να θυμόμαστε. Αλλά για τώρα, παρατηρούμε ότι είμαι κάνει αυτό μέσω της 65 συν 26. Επειδή προφανώς δεν θέλουν καν να κάνει την αριθμητική στο κεφάλι μου. Γι 'αυτό θα αφήσει ο compiler να το κάνει. Στη συνέχεια, όμως σε κάθε βρόχο, κάθε επανάληψη του βρόχου, είμαι προσαύξηση i. Μέχρι τώρα αυτό φαίνεται λίγο αινιγματικό. Αλλά θα πρέπει να έχουμε το βασικό κτίριο μπλοκ με το οποίο για να το καταλάβουμε αυτό. % C είναι μόνο ένα σύμβολο κράτησης θέσης για μια χαρα. % I είναι ένα σύμβολο κράτησης θέσης για έναν int. Και αποδεικνύεται ότι χρησιμοποιώντας αυτό νέα σύνταξη, αυτή η παρενθετική, έτσι να μιλήσει, έτσι ώστε ένα τύπο δεδομένων μέσα σε παρένθεση, Μπορώ να αναγκάσει τον compiler για τη θεραπεία i δεν είναι ακέραιος αριθμός, αλλά ως char. Με αυτόν τον τρόπο μου δείχνει το χαρακτήρα ισοδύναμο αυτού του αριθμού. Τώρα, εδώ κάτω, αυτός ο κώδικας είναι λίγο πολύ ίδια. Ήθελα απλώς να super ρητά το γεγονός ότι αρχίζω σε 97, η οποία είναι πεζά ένα. Με πάνω από 26 περισσότερα γράμματα. Και είμαι doing-- και πάλι, χύτευση i, να το πω έτσι. Ή τύπου χύτευσης i, να το πω έτσι. Από int σε char. Έτσι ώστε το τελικό αποτέλεσμα πρόκειται να είναι, ειλικρινά, πληροφορίες που ήδη γνωρίζουμε. Πάω να κάνει ascii-0 δεν dot-- dot c. Ανακοίνωση, ίσως έκανε ότι λάθος που έκανα ακριβώς λάθος. Κάντε ascii-0. Τώρα πάω να κάνω ./ascii-0. Θα μεγέθυνση, και, δυστυχώς, πρόκειται να κυλούν στην οθόνη. Αλλά βλέπουμε μια ολόκληρη διάγραμμα όπου μια χάρτες σε 97, β χάρτες σε 98, και αν μετακινηθείτε προς τα επάνω περαιτέρω Α, φυσικά, χαρτογραφεί στην 65. Έτσι, αυτό είναι μόνο για να πούμε ότι τι έχουμε κήρυγμα, υπάρχει αυτή η ισοδυναμία, είναι στην πραγματικότητα η περίπτωση στην πραγματικότητα. Έτσι, μια γρήγορη τροποποίηση του αυτή. Επιτρέψτε μου να ανοίξει ascii-1.γ. Και παρατηρήσετε αυτό το έξυπνο, το είδος της, διευκρίνιση αυτή. Αυτό είναι ascii-1.γ, και παρατηρήσετε αυτό το τρελό πράγμα. Και αυτό γίνεται πραγματικά με την καρδιά από ποιους υπολογιστές κάνουν. Ακόμα κι αν εμείς οι άνθρωποι θα δεν μετράνε σε όρους letters-- Δεν νομίζω να αρχίσουμε να σκεφτόμαστε, εντάξει ένα τότε b, και να τα χρησιμοποιήσετε για να μετράνε τα φυσικά αντικείμενα. Μπορείτε σίγουρα να πω ότι θέλω να προετοιμάσει κάποια μεταβλητή που ονομάζεται c-- αλλά θα μπορούσε να λέγεται αυτό anything-- έτσι γ αρχικοποιείται στο κεφάλαιο Α Διότι στο τέλος της ημέρας, τον υπολογιστή δεν με νοιάζει τι είστε αποθήκευση, που νοιάζεται μόνο για το πώς θέλετε να παρουσιάσει τις πληροφορίες. Πώς θέλετε τον υπολογιστή σας για να ερμηνεύσει αυτό το μοτίβο των bits; Έτσι, αυτό δεν είναι κάτι που Θα πρότεινα γενικά να κάνει. Είναι πραγματικά ακριβώς ένα παράδειγμα για να μεταφέρω ότι μπορείτε απολύτως προετοιμάσει έναν ακέραιο αριθμό σε char. Επειδή κάτω από το κουκούλα ενός char, φυσικά, είναι απλά ένας αριθμός από 0 έως 255. Έτσι, μπορείτε σίγουρα το βάζουμε μέσα από ένα int. Και τι είναι αυτό, επίσης, αποδεικνύει είναι ότι εμείς μπορεί να μετατρέψει από ένα πληκτρολογήστε στο άλλο, εδώ, τελικά την εκτύπωση το ίδιο πράγμα. Και στην πραγματικότητα, αυτό που θα καθορίσει online-- ήταν γραφτό να το πω αυτό, και πάλι, εδώ. Επιτρέψτε μου να καθαρίσει αυτό επάνω σε απευθείας σύνδεση, και θα δείτε σε απευθείας σύνδεση περιδιάβαση, όπως απαιτείται, τι επρόκειτο εκεί. OK. Έτσι, το τελευταίο παράδειγμα τώρα συμμετοχή α και β και στη συνέχεια θα πάρει τα πράγματα επάνω μια εγκοπή. Έτσι, με ένα και β και γ στην κεφαλαιοποίηση και η ισοδυναμία τους, ας ρίξτε μια ματιά σε αυτό το παράδειγμα, εδώ. Ένα άλλο παράδειγμα κώδικα. Θα ανοίξει ένα που είναι που έχουν ήδη γίνει, γι 'αυτό Δεν πρέπει να πληκτρολογήσετε όλα από το μηδέν. Και ανακοίνωση στην αναμονή είμαστε με τη χρήση πολλαπλών κεφαλίδα αρχεία, μεταξύ των οποίων είναι ο νέος μας φίλος, string.h. Τώρα αυτό φαίνεται, σε πρώτη ματιά, μια μικρή αινιγματική. Αλλά ας δούμε αν δεν μπορούμε να αιτιολογήσει μέσα από ό, τι συμβαίνει εδώ. Πρώτα παίρνω ένα string από το χρήστη, και έβαλα αυτό το αλφαριθμητικό σε μια μεταβλητή ονομάζεται s. Αντιγράψτε πάστα από πριν. Στη γραμμή 22, είμαι προφανώς κάνει ακριβώς ό, τι Το έκανα πριν από λίγο, είμαι επανάληψη πάνω από τους χαρακτήρες στο s. Και τα νέα κόλπα εδώ χρησιμοποιούν μήκος συμβολοσειράς, ο ανήλικος βελτιστοποίηση αποθηκεύει το μήκος της συμβολοσειράς σε n, παρά καλώντας strlen και πάλι, και ξανά, και ξανά. Και απλά ελέγχοντας ότι i είναι μικρότερη από n. Τώρα εδώ, τα πράγματα παίρνουν λίγο ενδιαφέρον. Αλλά είναι απλά μια εφαρμογή από αυτήν την ίδια νέα ιδέα. Τι σε κάνει English s βραχίονα i αντιπροσωπεύει; ΚΟΙΝΟ: Μετρώντας το καθένα χαρακτήρα [δεν ακούγεται]. DAVID J. MALAN: Μετρώντας κάθε χαρακτήρα. Και ακόμη πιο συνοπτικά, s βραχίονα i αντιπροσωπεύουν ό, τι; Θα σας πω. Δεν είναι για να σας βάλει στο σημείο εδώ. ΚΟΙΝΟ: Well-- DAVID J. MALAN: Έτσι, αν η λέξη is-- αν το string είναι Zamyla, που starts-- ΚΟΙΝΟ: --you ασχολούνται με οι χαρακτήρες separately-- DAVID J. MALAN: Καλή. Ακριβώς. Ο συμβολισμός βραχίονα πλατεία σας επιτρέπει να έχουν πρόσβαση σε κάθε χαρακτήρα ξεχωριστά, έτσι s βραχίονα 0 πρόκειται να είναι η πρώτο χαρακτήρα της συμβολοσειράς. s βραχίονα 1 θα είναι το δεύτερο, και ούτω καθεξής. Έτσι, το ερώτημα που ρωτάω, εδώ, σε αυτή την κατάσταση είναι αυτό; Είναι το ί-οστό χαρακτήρα του s μεγαλύτερη από ή ίση με πεζά α; Και τι σημαίνει αυτό, εδώ, με τα διπλά συμπλεκτικά σύμβολα; ΚΟΙΝΟ (ΜΑΖΙ): Και. DAVID J. MALAN: Και. Είναι ακριβώς ισοδύναμο με αυτό. Και δεν είναι μια λέξη-κλειδί σε C, θα πρέπει να χρήση, ενοχλητικά, εμπορικό και ampersand. Και αυτό, αντιθέτως, ζητά είναι s-s ί-οστό χαρακτήρα μικρότερη ή ίση σε πεζά z; Και πάλι, εδώ είναι όπου κατανόηση της υποκείμενης εφαρμογή μιας υπολογιστής έχει νόημα. Παρατηρήστε ότι, ακόμα κι αν έχω το dot dot dot εκεί, Μοιάζει με ένα από z πεζά είναι όλες οι συνεχόμενες τιμές επάνω από 97 και πάνω. Και για την ίδια κεφαλαία ξεκινώντας 65. Έτσι, το πακέτο, τότε, είναι ότι στα αγγλικά, πώς θα περιγράφατε ποια γραμμή 24 κάνει; Ναι; ΚΟΙΝΟ: Στις 24 θα έχει τον έλεγχο για να δούμε εάν κάθε χαρακτήρας είναι ένα πεζό. DAVID J. MALAN: Είναι ελέγχοντας αν κάθε χαρακτήρας είναι ένα πεζό γράμμα. Έτσι, ακόμη πιο συνοπτικά, είναι η ί-οστό χαρακτήρα του s πεζά; Αυτό είναι ό, τι είμαστε εκφράζει εδώ λογικά, λίγο κρυφά, αλλά τελικά αρκετά ευθέως. Είναι s το ί-οστό χαρακτήρα πεζά; Αν ναι, και εδώ είναι όπου τα πράγματα πάρει λίγο μυαλό κάμψης για μια στιγμή, αν ναι, πηγαίνετε μπροστά και να εκτυπώσετε ένα χαρακτήρα. Έτσι, αυτό είναι μόνο ένα σύμβολο κράτησης θέσης, τι αλλά ο χαρακτήρας; Γιατί να κάνω s βραχίονα i μείον η έκφραση αυτή εδώ; Καλά παρατηρήσετε το μοτίβο εδώ. Οι πραγματικοί αριθμοί δεν πειράζει τόσο πολύ. Να σημειωθεί όμως ότι το 97 είναι πόσο μακριά από το 65; ΚΟΙΝΟ: 32. DAVID J. MALAN: 32. Πόσο μακριά είναι 98 από 66; ΚΟΙΝΟ: 32. DAVID J. MALAN: Μικρή c από το μεγάλο C; 32. Έτσι, υπάρχει 32 λυκίσκου από ένα γράμμα στο άλλο. Έτσι, ειλικρινά, θα μπορούσε απλουστευθεί αυτή με εκείνη. Αλλά τότε είμαι το είδος του σκληρά κωδικοποίησης αυτό το χαμηλό επίπεδο κατανόησης ότι δεν υπάρχει αναγνώστης είναι ποτέ πρόκειται να καταλάβει. Έτσι, Πάω να το γενικεύσουμε, όπως, I γνωρίζουν τα πεζά γράμματα είναι μεγαλύτερα. Ξέρω ότι τα κεφαλαία γράμματα είναι μικρότερες τιμές, ειρωνικά. Αλλά αυτό είναι ουσιαστικά ισοδύναμο με λέγοντας αφαιρέσουμε 32 από s βραχίονα i. Έτσι, στο πλαίσιο της εν λόγω γράμματα, αν το γράμμα συμβαίνει να είναι ένα, πεζά α, και εγώ αφαιρέσουμε 32, τι επιπτώσεις έχει αυτό, μαθηματικά, σε πεζά ένα; ΚΟΙΝΟ: Capitalizes-- DAVID J. MALAN: το κεφαλαίο. Και πράγματι, αυτός είναι ο λόγος μας πρόγραμμα ονομάζεται αξιοποιήσει το μηδέν. Αυτό το πρόγραμμα, είτε κεφαλαιοποιεί ένα e-mail, μετά τον έλεγχο, εφόσον είναι Πράγματι, ένα πεζό γράμμα. Διαφορετικά, στην γραμμή 30, τι μπορώ να κάνω αν δεν είναι ένα πεζό γράμμα που είμαι κοιτάζοντας σε ένα συγκεκριμένο επανάληψη του βρόχου. Απλά εκτυπώσετε. Έτσι, δεν αλλάζουν την ουσία ότι δεν είναι ακόμη πεζά. Περιορίστε τον εαυτό σας να λίγο ένα με λίγο z. Τώρα αυτό είναι αρκετά απόκρυφα. Αλλά στο τέλος της ημέρας, αυτό είναι το πώς εμείς, μια φορά κι έναν καιρό, έπρεπε να εφαρμόσουν τα πράγματα. Αν αντί να ανοίγουν κεφαλαιοποιήσει ένα, oh δόξα τω Θεώ. Υπάρχει μια λειτουργία καλείται να επάνω ότι μπορεί να κάνουμε ό, τι ακριβώς έκανε σε ένα αρκετά χαμηλό επίπεδο. Τώρα με πάνω είναι ενδιαφέρουσα επειδή έχει κηρυχθεί σε ένα αρχείο, και θα γνωρίζουν μόνο αυτό από τον έλεγχο της τεκμηρίωσης, ή να πει, ας πούμε, στην τάξη, όπου υπάρχει, σε ένα αρχείο που ονομάζεται ctype.h. Έτσι, αυτό είναι ένα άλλο νέο φίλος μας. Και για να το κάνει πάνω ακριβώς ό, τι υποδηλώνει το όνομά του. Μπορείτε να περάσετε σε, ως επιχείρημα, μεταξύ αυτές οι παρενθέσεις, κάποιες χαρακτήρα. Πάω να περάσει στην ί-οστό χαρακτήρα του s χρησιμοποιώντας φανταχτερό νέο συμβολισμό μας συμμετοχή αγκύλες. Και να μαντέψω, τι είναι η επιστροφή αξία του σε ανώτερο προφανώς θα να είναι; Ένα κεφαλαίο γράμμα. Ένα κεφαλαίο γράμμα. Έτσι, αν περάσει σε πεζά a, ελπίζω, εξ ορισμού σε ανώτερο, πρόκειται να επιστρέψει μια κεφαλαία A. Διαφορετικά, αν αυτό δεν είναι ένα πεζό γράμμα την πρώτη θέση, απλά να το τυπώσετε έξω. Και πράγματι, η ανακοίνωση ο δεύτερος φίλος εδώ. Δεν είναι μόνο στην ανώτερη υπάρχει, αλλά είναι χαμηλότερο, η οποία απαντά στην πραγματικότητα η ερώτηση για μένα. Τώρα όποιος έγραψε αυτά τα πράγματα, 10s χρόνια πριν, ξέρετε τι; Εφαρμόζεται σε άνω και είναι μειώσει τη χρήση κώδικα όπως αυτό. Αλλά και πάλι, σύμφωνα με η ιδέα της ανεύρεσης μακριά, είδος, χαμηλότερο επίπεδο λεπτομέρειες εφαρμογής. Και στέκεται στους ώμους των ανθρώπων που ήρθαν πριν από εμάς, χρησιμοποιώντας συναρτήσεις σαν την ανώτερη και είναι χαμηλότερη, η οποία αρκετά θαυμάσια είναι όμορφα όνομα να πει ό, τι κάνουν, είναι ένα θαυμάσιο παράδειγμα για να υιοθετήσουν. Τώρα, αποδεικνύεται ότι, αν διάβασα η σελίδα man για, ας πούμε, στο ανώτερο, Μάθω κάτι άλλο. Έτσι, ο άνθρωπος toupper. Είναι λίγο συντριπτική. Αλλά προσέξτε, εδώ είναι η αναφορά του το αρχείο κεφαλίδας που θα πρέπει να χρησιμοποιήσετε. Παρεμπιπτόντως, επειδή αυτό είναι παραπλανητική, η λειτουργία χρησιμοποιεί ints αντί των χαρακτήρων για λόγους ελέγχου σφάλματος. Αλλά θα έρθει ίσως πίσω στο μέλλον. Να σημειωθεί όμως, εδώ, στο ανώτερο μετατρέπει το γράμμα c σε κεφαλαία, αν είναι δυνατόν. Έτσι ώστε να είναι αρκετά απλή. Και τώρα ας είμαστε λίγο πιο συγκεκριμένος. Ας δούμε από την πλευρά της η Σελίδα άνθρωπος κάτω από την αξία επιστροφής. Η τιμή που επιστρέφεται είναι ότι από την μετατροπή e-mail. Ή γ, αν η μετατροπή Δεν ήταν δυνατόν, όπου c είναι η αρχική είσοδος. Που ξέρω από εδώ, από την το επιχείρημα για την ανώτερη. Έτσι τι είναι το πακέτο αυτό; Η τιμή που επιστρέφεται είναι ότι από την μετατροπή e-mail, ή γ, το αρχικό γράμμα, αν η μετατροπή δεν ήταν δυνατή. Τι βελτίωσης μπορώ, συνεπώς, κάνουν με το σχεδιασμό κωδικό μου; Ναι; ΚΟΙΝΟ: Μπορείτε να αφαιρέσετε το άλλο. DAVID J. MALAN: μπορώ αφαιρέσετε τη δήλωση άλλος, και όχι μόνο η δήλωση αλλού. ΚΟΙΝΟ: Μπορείτε να αφαιρέσετε [δεν ακούγεται]. DAVID J. MALAN: μπορώ καταργήσετε ολόκληρο το πιρούνι στο δρόμο, αν ο άλλος συνολικά. Έτσι, πράγματι, επιτρέψτε μου να ανοίξει η τελική έκδοση του αυτό, κεφαλαιοποιήσει-2 και να παρατηρήσετε πόσο, αν θα, σέξι, ο κώδικας είναι τώρα να πάρει, σε ότι έχω μειωθεί από κάποια επτά ή έτσι γραμμές σε μόλις τέσσερις, η λειτουργικότητα που προορίζονται καλώντας απλά στην ανώτερη, περνώντας s βραχίονα i, και εκτύπωση έξω, με το σύμβολο κράτησης θέσης% c, το συγκεκριμένο χαρακτήρα. Τώρα, αναμφισβήτητα, υπάρχει ένα bug, ή τουλάχιστον ο κίνδυνος ενός bug, σε αυτό το πρόγραμμα. Έτσι απλά για να επανέλθει σε μια προηγούμενη πακέτο, τι πρέπει να κάνω πιθανότατα και σε αυτό το πρόγραμμα για να γίνει πιο ισχυρή, έτσι ώστε δεν υπάρχει κανένας τρόπος που μπορεί να συντριβή, ακόμη και σε σπάνιες περιπτώσεις; ΚΟΙΝΟ: Βεβαιωθείτε ότι δεν είναι NULL. DAVID J. MALAN: Βεβαιωθείτε ότι δεν είναι NULL. Έτσι, πραγματικά, να κάνει αυτό το σούπερ σωστή, πρέπει να κάνω κάτι σαν, αν s δεν είναι NULL, τότε να προχωρήσει και να εκτελέσει αυτές οι γραμμές κώδικα, το οποίο Μπορώ τότε περίπτωση, όπως ότι, και στη συνέχεια θα τοποθετούνται σε στενή κηδεμόνα μου. Έτσι, καλό δέσιμο μεταξύ των δύο ιδεών. Ναι; ΚΟΙΝΟ: Θα μπορούσατε να χρησιμοποιήσετε ένας κάνει, ενώ βρόχο, αντ 'αυτού; DAVID J. MALAN: Θα μπορούσε Κάνω ένα do while loop; ΚΟΙΝΟ: --you θέλετε να βεβαιωθείτε ότι στην πραγματικότητα [δεν ακούγεται]. DAVID J. MALAN: Θα μπορούσε μπορείτε να χρησιμοποιήσετε ένα do while; Σύντομη απάντηση, όχι. Επειδή είστε έτοιμος να εισαγάγει μια άλλη υπόθεση γωνία. Αν το string είναι μηδενικού μήκους. Αν, για παράδειγμα, εγώ απλά πατήστε Εισάγετε, χωρίς ποτέ πληκτρολόγηση Zamyla. Πάω να σας παραδώσει ένα πραγματικό εγχόρδων, όπως θα δούμε τελικά, ότι έχει μηδενική χαρακτήρες. Είναι ακόμα ένα string, είναι απλά σούπερ σύντομη. Αλλά αν μπορείτε να χρησιμοποιήσετε ένα do while, θα πάμε να τυφλά να προσπαθήσουμε να κάνουμε κάτι με σεβασμό προς την εν λόγω σειρά, και τίποτα δεν πρόκειται να είναι εκεί. ΚΟΙΝΟ: Λοιπόν, αν κάνατε κάνει [δεν ακούγεται] ενώ S-- DAVID J. MALAN: Ω βλέπω, να κρατήσει να πάρει μια σειρά από το χρήστη. Έτσι σύντομη απάντηση, θα θα μπορούσε, και να κρατήσει εχθρική να σας δώσει μια σειρά που είναι αρκετά μικρή για να χωράει στη μνήμη. Απολύτως. Απλά επέλεξε να μην. Αν δεν μου δίνουν το string I θέλουν, είμαι εγκατάλειψη, δίνω επάνω. Αλλά απολύτως, για το σκοπό αυτό, θα μπορούσε να κάνει απολύτως αυτό. Έτσι, τα αρχεία header της βιβλιοθήκης ότι είμαστε τώρα εξοικειωμένοι με είναι αυτά, εδώ. Standard I / O, CS50.h, string.h, ctype.h, και υπάρχουν, πράγματι, άλλοι. Μερικοί από εσάς έχουν ανακαλύψει η βιβλιοθήκη μαθηματικών στο math.h. Αλλά επιτρέψτε μου να σας παρουσιάσουμε, τώρα, να ο πόρος αυτός που το προσωπικό CS50, Davin, και Rob, και Gabe ιδιαίτερα έχουν βάλει μαζί. Αυτό θα συνδέσει σύντομα σε ιστοσελίδα του μαθήματος. Λέγεται αναφορά CS50. Ποια ακριβώς για να σας δώσει μια γρήγορη γεύση από αυτό, λειτουργεί ως εξής. Επιτρέψτε μου να πάω να reference.cs50.net. Θα δείτε στην αριστερή πλευρά άλλη μια συντριπτική λίστα των λειτουργιών που έρχονται με το c. Αλλά αν με νοιάζει, προς το παρόν, περίπου κάτι σαν strlen, Μπορώ να το πληκτρολογήσετε εκεί. Φιλτράρει τα κάτω στη λίστα ακριβώς ό, τι με νοιάζει. Πάω να το κλικ. Και τώρα για την αριστερά, θα δείτε τι ελπίζουμε είναι μια πιο απλή, ανθρώπινη φιλική εξήγηση για το πώς η λειτουργία αυτή λειτουργεί. Επιστρέφει το μήκος μιας συμβολοσειράς. Εδώ είναι μια σύνοψη, εδώ είναι το πώς θα χρησιμοποιήσετε την άποψη του αρχείου header, και από την άποψη του τι είναι η λειτουργία Μοιάζει όσον αφορά τα επιχειρήματα της. Και τότε εδώ, επιστρέφει το μήκος μιας συμβολοσειράς. Αλλά για όσους από εσάς πιο άνετα, μπορείτε πραγματικά να κάνετε κλικ πιο άνετα, και τα περιεχόμενα του αυτό σελίδα, τώρα, θα αλλάξουν να είναι οι προεπιλεγμένες τιμές για το τι μπορείτε να πάρετε χρησιμοποιώντας τη σελίδα man. Με άλλα λόγια, CS50 αναφοράς είναι η απλούστευση σελίδες man από το προσωπικό, για τους μαθητές. Ιδιαίτερα, όσοι λιγότερο άνετα και στο μεταξύ, έτσι ώστε να Δεν πρέπει να προσπαθήσουμε να τυλίξει το μυαλό σας γύρω, ειλικρινά, κάποια αρκετά αινιγματική σύνταξη και τεκμηρίωση κάποτε. Έτσι, έχετε κατά νου ότι στις μέρες που έρχονται. Μέχρι εδώ, και πάλι, είναι ένα Zamyla. Ας ρωτήσουμε τώρα ένα ερώτημα που είναι λίγο πιο ανθρώπινη προσβάσιμα. Χάρη στο Chang, που είναι ήδη εκτύπωση περισσότερες ελέφαντες ασταμάτητα για τις τελευταίες ημέρες. Έχουμε μια ευκαιρία να δώσει τουλάχιστον ένας από τους μακριά. Εάν θα μπορούσαμε να πάρουμε μόνο ένας εθελοντής να έρθουν σε έως σχεδιάσετε πάνω στην οθόνη. Πόσο περίπου εδώ; Έλα πάνω. Ποιο είναι το όνομά σου; ALEX: Alex. DAVID J. MALAN: Alex. Εντάξει. Alex, έλα επάνω. Είμαστε έτοιμοι να δούμε σας χειρογράφου στην οθόνη εδώ. Εντάξει, ωραίο να σας γνωρίσουμε. ALEX: Χάρηκα που σας γνώρισα. DAVID J. MALAN: Εντάξει. Έτσι, super απλή άσκηση. Bar δεν είναι υψηλό σε πάρετε έναν ελέφαντα σήμερα. Παίζετε το ρόλο του GetString. Και Πάω να σας πω ακριβώς το string που έχετε πάρει. Και ας υποθέσουμε ότι, GetString, έχουν κληθεί. Και ο άνθρωπος, όπως εγώ, έχει δακτυλογραφημένες σε Zamyla, Ζ-Α-Μ-Υ-L-A. Απλά πηγαίνετε μπροστά και να γράψει Zamyla για το οθόνη σαν να έχουν πάρει και αυτό αποθηκεύεται κάπου στη μνήμη. Φεύγοντας από το δωμάτιο για το τι θα είναι αρκετά άλλα words-- που είναι εντάξει, συνεχίζω. [Γέλια] Έτσι Zamyla, εξαιρετική. Ας υποθέσουμε ότι, GetString, καλούνται και πάλι. Και ως εκ τούτου, θα ήθελα να σας παρέχει, κατά το πληκτρολόγιο, με άλλο όνομα, Belinda. Εντάξει. Και τώρα η επόμενη φορά GetString είναι ονομάζεται, θα πληκτρολογήσετε κάτι σαν Gabe, G-Α-Β-Ε. Είσαι πραγματικά λαμβάνει στην καρδιά μνήμη τυχαίας προσπέλασης. Ποια είναι αντλώντας τα πάντα εντελώς τυχαία. OK. [Γέλια] ALEX: Συγγνώμη χειρόγραφό μου είναι κακό. DAVID J. MALAN: Όχι, αυτό είναι εντάξει. Και τι γίνεται με τον Rob, R-O-B. OK. Καλή. Γι 'αυτό και δεν προβλέπετε θα το είδος του θέσει τα πράγματα με αυτόν τον τρόπο. Αλλά μπορούμε να κάνουμε αυτό το έργο. Λοιπόν, πώς θα πάτε για τη θέσπιση από αυτές χαρακτήρες στη μνήμη; Με άλλα λόγια, αν σκεφτούμε Αυτό ορθογώνια μαύρη οθόνη καθώς αντιπροσωπεύει ένα υπολογιστή RAM, ή μνήμη. Και υπενθυμίζουν ότι η μνήμη RAM είναι απλά ένα σωρό bytes, και bytes είναι ένα σωρό κομμάτια. Και bits είναι κάπως εφαρμοστούν, γενικά με κάποια μορφή ηλεκτρικής ενέργειας σε hardware. Έτσι, αυτό είναι το είδος της layering έχουμε μιλήσει για και μπορεί να πάρει πλέον δεδομένο. Πώς θα πάτε για την να αποφασίσει πού να γράψει Rob έναντι Gabe έναντι Belinda έναντι Zamyla; ALEX: έκανα μόνο στο να διατάξει ότι μου είπες. DAVID J. MALAN: Και αυτό είναι αλήθεια. Αλλά αυτό που διέπεται όπου βάζετε Το όνομά Belinda και το όνομα Gabe είναι; ALEX: Τίποτα; DAVID J. MALAN: [γελάει] Έτσι που λειτουργεί, ότι είναι μια χαρά. Έτσι, οι υπολογιστές είναι λίγο πιο ομαλή από ό, τι αυτό. Και έτσι όταν implement-- μείνει εκεί μόνο για ένα moment-- όταν στην πραγματικότητα εφαρμόσουν κάτι σαν GetString σε έναν υπολογιστή, Zamyla θα μπορούσε να τοποθετείται λίγο πολύ όπως κάνατε στην οθόνη, εκεί. Και αυτό είναι το κλειδί για να παρατηρήσετε εδώ, τι έκανε ο Alex, είναι ότι υπάρχει ένα είδος οριοθέτησης ανάμεσα σε κάθε μία από αυτές τις λέξεις, σωστά; Δεν έχετε γράψει Ζ-Α-Μ-Υ-L-Α-Β-Ε-Ε-Ι-Ν-ϋ-Α-G-Α-B-- Με άλλα λόγια, υπάρχει κάποιο είδος οριοθέτησης που φαίνεται να είναι, είδος, τυχαία απόσταση μεταξύ των διαφόρων αυτών λέξεων. Αλλά αυτό είναι καλό, γιατί εμείς οι άνθρωποι μπορούμε τώρα απεικονίσει ότι αυτά είναι τέσσερις διαφορετικές χορδές. Δεν είναι μόνο μία ακολουθία παρτίδων των χαρακτήρων. Έτσι ένας υπολογιστής, τότε, εν τω μεταξύ, θα μπορούσε να λάβει μια σειρά όπως Zamyla, που το καθένα από αυτά τα γράμματα μέσα από ένα byte της μνήμης. Αλλά αυτός ο αριθμός είναι πολύ μεγαλύτερος, φυσικά, από έξι χαρακτήρων. Υπάρχουν ένα σωρό RAM. Και έτσι πλέον, αυτό πλέγματος κουτιά πρόκειται να εκπροσωπεί ό, τι Alex μόνο έκανε εδώ στην οθόνη. Και τώρα, Alex, μπορούμε να σας το προσφέρουμε μπλε ή πορτοκαλί ελέφαντα από Chang. ALEX: Θα πάρω μια μπλε ελέφαντα. DAVID J. MALAN: Ένα μπλε ελέφαντα. Έτσι, ένα μεγάλο χειροκρότημα, αν μπορούσαμε, για Alex εδώ. [Χειροκρότημα] ALEX: Σας ευχαριστώ. DAVID J. MALAN: Σας ευχαριστώ. Έτσι, το πακέτο είναι ότι, παρόλο που η μοτίβο είδος αλλάξει με την πάροδο του χρόνου, εδώ στο διοικητικό συμβούλιο, δεν υπήρχε αυτή η οριοθέτηση μεταξύ των διαφόρων χορδές ότι ο Alex πήρε για μας. Τώρα υπολογιστές, ειλικρινά, θα μπορούσε να κάνει το ίδιο πράγμα. Θα μπορούσαν είδος γδούπο χορδές οπουδήποτε στην μνήμη RAM. Μέχρι εδώ, εδώ, εδώ κάτω, εδώ κάτω. Θα μπορούσαν να κάνουν ακριβώς αυτό. Αλλά, φυσικά, αυτό είναι ίσως δεν είναι η καλύτερη σχεδιασμό. Σωστά; Αν ρωτούσε Alex να πάρτε τα ονόματα, πιθανότατα ο έπαιρνα τεθούν κάποια πιο κάτω εδώ, ίσως μέχρι εδώ, εδώ, εδώ, τελικά εδώ. Αλλά με λίγο περισσότερο προγραμματισμό, βεβαίως, θα μπορούσε να θέσει τα πράγματα πιο καθαρά. Και πράγματι, αυτό είναι ό, τι κάνει ένας υπολογιστής. Αλλά η σύλληψη είναι ότι εάν η επόμενη χορδή παίρνω μετά Zamyla είναι κάτι όπως και η Belinda, προτείνει, όπου θα μπορούσαμε να γράψει το γράμμα b σε σχέση με αυτό το πλέγμα; Πού θα πας; Στα δεξιά του α, κάτω από το Ζ, κάτω από το α; Ποια θα ήταν το πρώτο ένστικτό σας είναι; ΚΟΙΝΟ: Κάτω από το z. DAVID J. MALAN: Έτσι, κάτω από το z. Και αυτό είναι αρκετά απλό, σωστά; Είναι το είδος του τακτοποιημένο, είναι ό, τι κάνουμε σε ένα πληκτρολόγιο, όταν έχουμε να πατήσετε το Enter, ή ένα μήνυμα ηλεκτρονικού ταχυδρομείου όταν κάνετε μια λίστα με κουκκίδες των πραγμάτων. Αλλά η πραγματικότητα είναι ότι οι υπολογιστές προσπαθούν να είναι πιο αποτελεσματική, και χώνω σίγουρα όσο δεδομένα στη μνήμη RAM του δυνατού, έτσι ώστε να μην χάνετε καμία bytes. Έτσι ώστε να μην χάνετε οποιαδήποτε οθόνη του real estate. Και το πρόβλημα, όμως, είναι ότι αν βάλουμε κυριολεκτικά το γράμμα β μετά, πώς θα πάμε να ξέρετε πού τελειώνει όνομα Zamyla του και αρχίζει το όνομα του Belinda είναι; Έτσι οι άνθρωποι μόλις πρότεινε, επίσης, χτύπησε το πλήκτρο Enter, κατ 'ουσίαν. Βάλτε το κάτω. Ή ακόμα, όπως έκανε ο Alex, μόλις αρχίσετε να γράφετε το επόμενο όνομα κάτω από το προηγούμενο, και κάτω από εκείνο το ένα, και στη συνέχεια, κάτω από αυτό το ένα. Αυτή είναι μια οπτική ένδειξη. Οι υπολογιστές έχουν μια άλλη οπτική ένδειξη, αλλά είναι λίγο πιο σύντομη. Είναι αυτό το funky χαρακτήρα. Backslash 0, η οποία είναι ίσως θυμίζει backslash n, και ούτω καθεξής, τώρα. Οι ειδικές ακολουθίες διαφυγής. Backslash 0 είναι ο τρόπος της αντιπροσωπεύουν οκτώ bits μηδέν σε μια σειρά. 0000 0000. Ο τρόπος που εκφράζουν ότι δεν είναι χτύπησε τον αριθμό μηδέν στο πληκτρολόγιό σας, γιατί στην πραγματικότητα η οποία είναι ένα char ASCII. Μοιάζει με έναν αριθμό, αλλά είναι στην πραγματικότητα ένα δεκαδικό αριθμό που αντιπροσωπεύει την εγκύκλιο γλύφω, η εγκύκλιος γραμματοσειρά. Εν τω μεταξύ, backslash μηδέν σημαίνει, κυριολεκτικά βάλει οκτώ μηδενικά bytes εδώ για μένα. Έτσι, αυτό είναι κάπως αυθαίρετη. Θα μπορούσα να έχω χρησιμοποιήσει οποιοδήποτε σχέδιο από bits, αλλά ο κόσμος αποφάσισε μερικά χρόνια πριν, ότι για να αντιπροσωπεύουν το τέλος ενός string στη μνήμη, απλά βάλτε ένα σωρό μηδενικά. Επειδή μπορούμε να ανιχνεύσουμε αυτό. Τώρα αυτό σημαίνει ότι δεν υπάρχει επιστολή του αλφάβητο μπορεί να εκπροσωπείται με μηδενικά. Αλλά αυτό είναι εντάξει, έχουμε ήδη δει ότι είμαστε χρησιμοποιώντας 65 για μέχρι το 97 και πάνω. Εμείς δεν πάρετε οπουδήποτε κλείσει σε όλα τα μηδενικά. Έτσι Belinda στη μνήμη ενός υπολογιστή είναι πραγματικά πρόκειται να πάει εδώ. Έχω συντάξει σε κίτρινο μόνο να επιστήσει την προσοχή μας σε αυτό. Και προειδοποίηση, πάρα πολύ, αυτό είναι εντελώς αυθαίρετη. Έχω σχεδιαστεί ως ένα πλέγμα. Όπως, μνήμη RAM είναι μερικά μόνο φυσικό αντικείμενο. Δεν έχουν απαραίτητα γραμμές και στήλες, ανά se. Είναι μόλις πήρε ένα σωρό bytes υλοποιείται σε υλικό με κάποιο τρόπο. Αλλά αν μετά Belinda I πληκτρολογήσει στο όνομα Gabe του, ότι πρόκειται να καταλήξουν εδώ στη μνήμη, και αν πληκτρολογήσει το όνομα Daven του, για παράδειγμα, ότι πρόκειται να καταλήγουν εδώ. Και μπορώ να συνεχίσω να γράψει ακόμα περισσότερα ονόματα. Δυστυχώς, αν προσπαθώ να γράφετε ένα σούπερ μεγάλο όνομα, Θα ήθελα να τρέχει τελικά έξω από τη μνήμη. Σε αυτή την περίπτωση, είναι GetString πρόκειται να επιστρέψει NULL, όπως είπαμε. Αλλά ευτυχώς, τουλάχιστον σε αυτό το οπτικό εδώ, δεν πήραμε αρκετά τόσο μακριά. Τώρα τι είναι ωραίο είναι ότι αυτό γενική ιδέα της κατεργασίας πραγμάτων όπως είναι σε κουτιά είναι εκπρόσωπος ενός χαρακτηριστικού από C και πολλές γλώσσες, γνωστό ως συστοιχία. Μια συστοιχία είναι ένας άλλος τύπος δεδομένων. Είναι μια δομή δεδομένων, αν θέλετε. Δομή, υπό την έννοια της πραγματικά, το είδος του, που αναζητούν σαν ένα κουτί, τουλάχιστον στο μάτι του μυαλού σας. Ένας πίνακας είναι ένα συνεχόμενο αλληλουχία των ίδιων τύπων δεδομένων, πίσω στην πλάτη με πλάτη με πλάτη. Έτσι, ένα κορδόνι, σε άλλες λόγια, είναι μια σειρά από χαρακτήρες. Μια σειρά από χαρακτήρες. Αλλά τελικά μπορείτε να έχετε συστοιχίες των σταφυλιών των πραγμάτων. Στην πραγματικότητα, μπορούμε να βάλουμε ακόμα αριθμούς σε μία συστοιχία. Έτσι ώστε η μορφή με την οποία θα πάμε για να ξεκινήσει δηλώνοντας τα δεδομένα δομή που είναι γνωστή ως μία συστοιχία πρόκειται επίσης να χρησιμοποιήσετε αγκύλες. Αλλά αυτές οι αγκύλες πρόκειται να έχουν διαφορετική σημασία σε αυτό το πλαίσιο. Και ας το δούμε ως εξής. Ας υποθέσουμε ότι άνοιξα μέχρι ένα νέο αρχείο εδώ. Και εγώ να αποθηκεύσετε αυτή ως ages.c. Και εγώ θα σώσει αυτό το φάκελο μου εδώ. Και τώρα είμαι πρόκειται να πάει μπροστά και να αρχίσετε να πληκτρολογείτε κάτι όπως περιλαμβάνονται CS50.h, περιλαμβάνουν stdio.h, int κύρια κενό. Και τότε μέσα από εδώ, θέλω να έχουν πρώτα μια int που ονομάζεται ηλικία. Και Πάω να χρησιμοποιήσετε ότι για να πάρετε μια int από το χρήστη για την ηλικία του. Αλλά αυτό το πρόγραμμα εννοείται να χρησιμοποιηθεί από πολλά άτομα, για οποιοδήποτε πλαίσιο. Έχω μια σειρά από ανθρώπους. Όλα αυτά πρέπει να πληκτρολογήσετε τους ηλικία ίσως για κάποιους, δεν ξέρω, ανταγωνισμού, ή εκδήλωση ότι έχουν έρθει για. Έτσι, το επόμενο πρόσωπο, I Χρειάζεται μια άλλη μεταβλητή. Διότι αν εγώ απλά κάνω ηλικία παίρνει getInt, ότι είναι πρόκειται να κοπανάω, ή να αντικαταστήσετε ηλικία του προηγούμενου ατόμου. Έτσι, αυτό δεν είναι καλό. Έτσι το πρώτο μου ένστικτο θα μπορούσε να είναι, ω, εντάξει, αν θέλω να πάρω πολλούς ανθρώπους του ages-- ας ονομάσουμε αυτό AGE1, int Age2 παίρνει int, int age3 παίρνει getInt. Και τώρα θα πάω να χρησιμοποιήσετε μερικά κωδικό ψευδοκώδικα εδώ. Κάντε κάτι με αυτούς τους αριθμούς. Θα αφήσουμε για μια άλλη μέρα ό, τι κάνουμε εκεί, γιατί μόνο νοιάζονται για το παρόν για AGE1, Age2, age3. Δυστυχώς, από τη στιγμή που την κατάρτιση αυτού του προγράμματος και να βάλουμε μπροστά από πραγματικούς χρήστες, ποια είναι η θεμελιωδώς κακό σχεδιασμό απόφαση που φαίνεται να έχουν κάνει; Ναι; ΚΟΙΝΟ: [δεν ακούγεται] DAVID J. MALAN: Ναι, Δεν έχω δοκιμάσει ακόμα να καταλάβω πόσα ηλικίες μπορώ πραγματικά νοιάζονται για; Αν έχω λιγότερα από τρία άτομα εδώ, και, συνεπώς, λιγότερες από τρεις αιώνες, Είμαι ακόμα τυφλά περιμένει τρεις. Θεός φυλάξοι τέσσερις άνθρωποι εμφανίζονται. Το πρόγραμμά μου απλά δεν θα τους στηρίξει ακόμα. Και έτσι αυτό, μεγάλη ιστορία Με λίγα λόγια, δεν είναι μια καλή συνήθεια. Σωστά; Ήμουν ουσιαστικά αντιγραφή και επικόλληση του κώδικα και μόνο μικροαλλαγές τα ονόματα των μεταβλητών. Και, Θεέ μου, αν είχε, δεν είναι τρεις ηλικιών, αλλά 10, ή 100, ή ακόμη και 6500 προπτυχιακούς φοιτητές, για παράδειγμα. Αυτό δεν πρόκειται να είναι ιδιαίτερα κομψό κώδικα, ή βιώσιμη. Θα πάμε να πρέπει να ξαναγράψουμε το πρόγραμμα κάθε φορά τον αριθμό των ανθρώπων αλλαγές. Έτσι, ευτυχώς, στην πραγματική μας ages.c αρχείο για σήμερα, έχουμε μια πιο έξυπνη λύση. Πρώτον, Πάω να δανειστεί η κατασκευάσει έχουμε χρησιμοποιήσει μερικές φορές, Αυτό κάνουμε, ενώ βρόχο, προκειμένου να πάρει ο αριθμός των ατόμων στο δωμάτιο. Είμαι ακριβώς πρόκειται να ταλαιπωρούν τον χρήστη, και πάλι και πάλι, έως ότου αυτός ή αυτή μου δίνει μια τιμή του η που είναι ένας θετικός ακέραιος. Θα μπορούσε να χρησιμοποιηθεί, το τελευταίο χρόνο για να πάρει θετικό int. Αλλά δεν έχουμε ότι για την πραγματική, έτσι πήγα μπροστά και εκ νέου σε εφαρμογή αυτή την ιδέα. Τώρα, εδώ κάτω, αυτό είναι το νέο κόλπο. Στη γραμμή 27, όπως τα σχόλια στη γραμμή 26 υποδεικνύει, δηλώνουν μια σειρά στην οποία για να αποθηκεύσετε την ηλικία του καθενός. Έτσι, εάν θέλετε να πάρετε, δεν είναι ένα int, δεν δύο ακεραίων, αλλά ένα σωρό από ints. Συγκεκριμένα n ακέραιοι, ήταν n μπορούσε είναι τρία, θα μπορούσε να είναι 100, θα μπορούσε να είναι 1000. Η σύνταξη, πολύ απλά, είναι να ας πούμε, τι είδους δεδομένα θέλεις; Τι θέλετε να καλέσετε ότι κομμάτι της μνήμης; Τι θέλετε να καλέσετε το δίκτυο που μοιάζει με αυτό εικονογραφικά; Και σε παρένθεση εδώ, λες πόσο μεγάλο θέλετε ο πίνακας να είναι. Και έτσι νωρίτερα, όταν είπε ότι η σύνταξη είναι λίγο διαφορετικά εδώ, είμαστε ακόμα χρησιμοποιώντας αγκύλες, αλλά όταν είμαι δηλώνοντας μια σειρά, ο αριθμός εσωτερικό του αγκύλες μέσα πόσο μεγάλο θέλετε ο πίνακας να είναι. Αντίθετα, όταν ήμασταν χρησιμοποιώντας s βραχίονα i πριν από λίγο, s, ένα string, Είναι πράγματι μια σειρά από χαρακτήρες, αλλά όταν δεν είστε δηλώνοντας μια μεταβλητή, όπως με τη λέξη κλειδί εδώ, είστε απλά να πάρει ένα συγκεκριμένο δείκτη, ένα ειδικό στοιχείο από την εν λόγω συστοιχία. Αφού γνωρίζουμε ότι, το υπόλοιπο από αυτό είναι απλή. Αν το νέο είμαι πρώτος πρόκειται να εκτυπώσετε Ποια είναι η ηλικία του ατόμου αριθμό i. Πού μπορώ να πω τον αριθμό ένα άτομο, Αριθμός πρόσωπο δύο, πρόσωπο αριθμό τρία. Και είμαι ακριβώς κάνει αριθμητική, έτσι ώστε σαν κανονικοί άνθρωποι, μετράμε από το ένα για αυτό προγράμματος, και όχι από το μηδέν. Στη συνέχεια, καλώ getint, αλλά έχω αποθηκεύσει η απάντηση στις ηλικίες περικλείουν i. Ποια είναι η ί-οστό ηλικίας στον πίνακα. Έτσι, λαμβάνοντας υπόψη ότι η τελευταία φορά που ήμασταν θεραπεία αυτά τα κιβώτια ως χαρακτήρες για το όνομα Zamyla του, και άλλοι. Τώρα, αυτά τα κουτιά αντιπροσωπεύουν 32 bits, ή τέσσερα bytes στην οποία μπορούμε να αποθηκεύσουμε ένα int, ένας int, ένας int. Όλα από τα οποία, και πάλι, είναι το ίδιο τύπο δεδομένων. Τώρα μπορώ να κάνω κάτι ανόητο, όπως το πέρασμα του χρόνου, απλά να δικαιολογήσει γράφοντας αυτό το πρόγραμμα. Και στη συνέχεια, εδώ κάτω, εγώ πάλι επαναλήψεις πάνω από τον πίνακα λέγοντας ένα χρόνο από τώρα, αριθμό ένα άτομο βούληση είναι κάτι ετών. Και για να καταλάβω ότι math-- Εννοώ, αυτό Δεν είναι πολύ περίπλοκη arithmetic-- Θα ήθελα να προσθέσω ένα με την ηλικία τους. Ακριβώς για να αποδείξει, και πάλι, αυτό. Ακριβώς όπως μπορώ δείκτης σε μια σειρά, s, έτσι μπορώ δείκτη σε ένα πίνακα των ηλικιών, όπως ότι υπάρχει. Λοιπόν, πού είναι αυτή η μετάβαση να μας παίρνετε; Έτσι θα δούμε, τελικά, ένα Λίγα πράγματα στις μέρες που έρχονται. Ένα, όλο αυτό το διάστημα, όταν γράφοντας τα δικά σας προγράμματα, όπως Mario, άπληστοι, πιστωτικές. Έχετε πληκτρολογώντας το όνομα του το πρόγραμμα και το χτύπημα Enter. Και στη συνέχεια να πάρει την είσοδο του χρήστη. Με GetString, getInt, getLongLong, ή τα παρόμοια. Αλλά αποδεικνύεται ότι τα στηρίγματα C κάτι που ονομάζεται γραμμή εντολών επιχειρήματα, τα οποία πρόκειται να μας αφήσει πραγματικά να πάρει τα λόγια που πληκτρολογείτε, στο αναβοσβήνει εντολών, μετά το όνομα του προγράμματός σας. Έτσι, στις μέρες που έρχονται, θα να πληκτρολογήσετε κάτι σαν Καίσαρα, ή ./caesar αριθμό 13, στη συνέχεια. Θα δούμε πώς αυτό λειτουργεί. Διότι πράγματι, σε πρόβλημα που δύο, είμαστε πρόκειται να σας παρουσιάσουμε σε ένα μικρό κάτι θυμίζει Ralphie του αμφισβητήσει νωρίτερα από χαρτογραφίας. Η τέχνη της κρυπτογράφησης των πληροφοριών. Αυτό, στην πραγματικότητα, είναι πολύ θυμίζει τι έκανε Ralphie. Αυτό είναι ένα παράδειγμα ενός κρυπτογράφησης αλγόριθμος ονομάζεται rot13, Κ-Ο-Τ 13. Πράγμα που σημαίνει απλά περιστρέψτε το γράμματα του αλφαβήτου 13 θέσεις. Και αν το κάνετε αυτό, θα δείτε τώρα τι είναι, ίσως, μια γνωστή φράση. Αλλά ο τρόπος με τον οποίο πρόκειται να χρησιμοποιήσει αυτό, τελικά, είναι πιο γενικά. Στην P έθεσε δύο, στην βασική έκδοση, θα εφαρμόσει ένα ζευγάρι από αλγόριθμους κρυπτογράφησης, μία που ονομάζεται Καίσαρα, μια που ονομάζεται Vigenere. Και οι δύο από αυτούς είναι περιστροφική αλγόριθμους κρυπτογράφησης, στο ότι με κάποιο τρόπο θα μετατρέψει ένα γράμμα σε ένα άλλο γράμμα. Και ο Καίσαρας είναι εξαιρετικά απλή. Μπορείτε να προσθέσετε ένα, μπορείτε να προσθέσετε 13, ή κάποιος αριθμός έως 26. Vigenere κάνει ότι για ένα ανά επιστολή βάση. Έτσι Vigenere, όπως θα δείτε στο spec, είναι πιο ασφαλές. Αλλά στο τέλος της ημέρας τι θα σας την εφαρμογή και P έθεσε δύο, είναι ότι το κλειδί που χρησιμοποιείτε και τις δύο για την κρυπτογράφηση και αποκρυπτογράφηση. Αναφερόμενος στην διαδικασία της μετατροπής απλό κείμενο, μερικά αρχικό μήνυμα, σε cypher κείμενο, το οποίο Είναι κάτι κρυπτογραφημένα. Και στη συνέχεια αποκρυπτογράφηση και πάλι. Στην έκδοση του χάκερ, Εν τω μεταξύ, θα είναι επιφορτισμένη με κάτι παρόμοιο στο πνεύμα, όπου θα σας δώσουμε ένα αρχείο, από ένα τυπικό Linux, ή Mac, Unix ή υπολογιστή που ονομάζεται etsy κωδικό πρόσβασης, το οποίο περιέχει ένα σύνολο δέσμη των ονομάτων χρηστών και κωδικών πρόσβασης. Και αυτοί οι κωδικοί πρόσβασης έχουν όλα κρυπτογραφημένα, ή κατακερματισμένο, να το πω έτσι, πιο σωστά όπως θα δείτε στο spec. Και η έκδοση του χάκερ θα αμφισβητήσουν σας με τη λήψη μια είσοδο, όπως αυτή, και πυρόλυση τον κωδικό πρόσβασης. Δηλαδή, υπολογίζοντας τι η κωδικό πρόσβασης του ανθρώπου στην πραγματικότητα ήταν. Επειδή, μάλιστα, οι κωδικοί πρόσβασης είναι γενικά δεν αποθηκεύονται στο σαφές, και γενικά τους κωδικούς πρόσβασης θα πρέπει να είναι δύσκολο να μαντέψει. Αυτό δεν είναι συχνά η περίπτωση. Και ό, τι νόμιζα ότι είχαμε να κάνουμε είναι συνάπτει με ένα ζευγάρι λεπτά ματιά σε ένα ιδιαίτερα κακή επιλογή των κωδικών πρόσβασης από μια ταινία που θα μπορούσε να ανακαλέσετε στοργικά. Και αν όχι, θα πρέπει να νοικιάσετε. [VIDEO PLAYBACK] -Helmet, Μπορείτε δαίμονας, τι συμβαίνει; Τι κάνεις στην κόρη μου; -Permit Μου να εισαγάγει το λαμπρή μικρά πλαστικό χειρουργό, Γιατρός Phillip Σλότκιν. Η μεγαλύτερη μύτη άνθρωπος εργασίας στην ολόκληρο το σύμπαν και το Μπέβερλι Χιλς. -Ο Υψηλότατε. -Nose Δουλειά; Δεν καταλαβαίνω. Έχει ήδη είχε μια εργασία μύτης. Ήταν την γλυκιά 16 του παρόντος. Όχι, δεν είναι αυτό που νομίζετε. Είναι πολύ, πολύ χειρότερα. Αν δεν μου δώσετε το συνδυασμό με την ασπίδα αέρα, Ο γιατρός Σλότκιν θα δώσει σας Η κόρη πίσω παλιά μύτη της. - [Λαχανιάζει] Nooooooooooooo. Πού το βρήκες αυτό; Εντάξει. Θα σας πω, εγώ θα πω. Όχι, μπαμπά, δεν υπάρχει. Δεν πρέπει. -Είσαι Σωστά αγαπητέ μου. Θα μου λείψει η νέα μύτη σας. Αλλά εγώ δεν θα τους το πει συνδυασμός δεν έχει σημασία τι. Οι πολύ καλά. Γιατρός Σλότκιν, όσο χειρότερα τόσο καλύτερα. -Το Ευχαρίστηση. -NO! Περιμένετε, περιμένετε. Θα το πω. Θα το πω. -I Ήξερε ότι θα μπορούσε να λειτουργήσει. Εντάξει, να μου το δώσεις. -η Συνδυασμός είναι ένα. -Ένα. -Ένα. -Δύο. -Δύο. -Δύο. -Τρία. -Τρία. -Τρία. -Τέσσερα. -Τέσσερα. -Τέσσερα. -Πέντε. -Πέντε. -Πέντε. -Οπότε Ο συνδυασμός είναι ένας, δύο, τρία, τέσσερα, πέντε. Αυτό είναι το πιο χαζό συνδυασμός Έχω ακούσει ποτέ στη ζωή μου. Αυτό είναι το είδος των πράγμα που ένας ηλίθιος θα έχει στις αποσκευές του. -Ευχαριστώ, Υψηλότατε σας. [REMOTE CLICKS] Τι έκανες; -I Απενεργοποιήσει το τείχος. Όχι, δεν το κάνατε, σας απενεργοποιήσει ολόκληρη την ταινία. -I Must've πάτησε το λάθος κουμπί. -Λοιπόν, Να επαναφέρει την! Βάλτε την ταινία πίσω! Ναι, κύριε! Ναι, κύριε. -Πάμε, Arnold. Έλα, Γκρέτσεν. Φυσικά ξέρετε εγώ θα Πρέπει να σας χρεώσει για αυτό. -Λοιπόν; Μήπως αυτό το έργο; Πού είναι ο βασιλιάς; -It Εργαστεί, κύριε, εμείς έχουν το συνδυασμό. Ωραία. Τώρα μπορούμε να πάρουμε και την τελευταία ανάσα φρέσκου αέρα από τον πλανήτη Δρυϊδία. Τι είναι ο συνδυασμός; -Ένα, Δύο, τρία, τέσσερα, πέντε. -Ένα, Δύο, τρία, τέσσερα, πέντε; Ναι. -Αυτό Είναι εκπληκτικό. Έχω την ίδια συνδυασμό στις αποσκευές μου. Προετοιμάστε Spaceball 1 για άμεση αναχώρηση. Ναι, κύριε. -Και Αλλάξει η συνδυασμό στις αποσκευές μου. [DOOR ΚΛΕΙΣΙΜΟ ΗΧΟΥ] [CLINK ΤΩΝ ΘΥΡΩΝ ΧΤΥΠΗΜΑ ΚΡΑΝΟΣ] -Ahh. [ΤΕΛΟΣ VIDEO PLAYBACK] DAVID J. MALAN: Αυτό είναι για CS50, θα τα πούμε την επόμενη εβδομάδα. NARRATOR: Και τώρα, Deep Σκέψεις, από Daven Farnham. Daven FARNHAM: Κωδικοποίηση σε C είναι πολύ πιο δύσκολο από ό, τι Scratch. printf, Scratch ήταν ένα ψέμα. [ΓΕΛΙΟ Soundbite]