>> [Παίζει μουσική]
>> DOUG LLOYD: Εντάξει, οπότε ας μιλάμε για τα επιχειρήματα της γραμμής εντολών.
Έτσι, μέχρι στιγμής κατά τη διάρκεια όμορφη πολύ όλα τα προγράμματά σας
έχουν πιθανότατα ξεκινήσει όπως this-- int main άκυρη.
Έχουμε συλλέξει εισόδου του χρήστη, αν χρειαζόμαστε
στα προγράμματά μας, όπως είναι η Πρόγραμμα Mario, για παράδειγμα,
με in-πρόγραμμα προτροπές.
Δεν χρειαζόταν να τροποποιήσουν η δήλωση των κυρίων,
διότι, αντί στο εσωτερικό της κύριας εμείς μόνο να πω, μπορείτε να καλέσετε για να πάρετε int.
Πόσο μεγάλο θέλετε η πυραμίδα να είναι;
Ή μπορείτε να καλέσετε για να πάρετε float-- πόσες αλλαγές
πρέπει εγώ εξόδου προς τον χρήστη;
>> Υπάρχει ένας άλλος τρόπος όμως, και αν θέλουμε οι χρήστες μας
να είναι σε θέση να παράσχει δεδομένων στο πρόγραμμά μας
κατά το χρόνο εκτέλεσης αντί ενώ το πρόγραμμα εκτελείται,
μια λεπτή διάκριση, αλλά Μερικές φορές ένα πολύ χρήσιμο ένα,
χρειαζόμαστε μια νέα μορφή δηλώνοντας κύρια.
Δεν μπορούμε να χρησιμοποιούμε int main άκυρη αν θέλουμε να συλλέγουν δεδομένα στη γραμμή εντολών
όταν ο χρήστης τρέχει το πρόγραμμα, ως εκ τούτου, τα επιχειρήματα της γραμμής εντολών.
>> Να συλλέγουν αυτά της γραμμής εντολών επιχειρήματα από το χρήστη,
αλλάξτε δήλωση σας κύρια για να μοιάσει this-- int
κύρια, ανοικτή παρένθεσης, int argc, κόμμα, κορδόνι argv, αγκύλες,
και, στη συνέχεια, ανοίξτε σγουρά στήριγμα.
Λοιπόν, τι σημαίνει αυτό ήδη;
Λοιπόν, περνάμε σε δύο παραμέτρους, ή επιχειρήματα ή οι εισροές στην κύρια.
Μία, ένας ακέραιος που ονομάζεται argc, και το άλλο είναι τι;
Είναι μια σειρά από strings, έτσι δεν είναι;
Βλέπουμε ότι η σημειογραφία βραχίονα πλατεία.
Είναι μια σειρά από strings.
Δεν είναι ένα άτομο εγχόρδων, είναι μια σειρά από strings.
Και τα δύο αυτά επιχειρήματα, argc και argv, σας δίνουν τη δυνατότητα να γνωρίζουν ποια δεδομένα του χρήστη
έδωσε στη γραμμή εντολών και πόσα πράγματα θα
παρέχονται στην γραμμή εντολών.
Αρκετά χρήσιμα πράγματα για να εργαστεί με.
>> Argc αντιπροσωπεύει καταμέτρηση επιχείρημα, και θα πρέπει να γνωρίζετε, από τον τρόπο,
ότι θα μπορούσατε να καλέσετε argc ό, τι θέλετε.
Μπορείτε να καλέσετε argv ό, τι ήθελε.
Αυτά είναι μόνο τα συμβατικά ονόματα που χρησιμοποιούμε για την μέτρηση them-- επιχείρημα,
και όπως θα δούμε σε ένα δεύτερο, διάνυσμα επιχείρημα, argv.
Αλλά δεν χρειάζεται να καλέσετε τους argc και argv, αν δεν θέλετε να,
αλλά συνήθως, αυτό είναι αυτό που κάνουμε.
>> Έτσι κι αλλιώς, argc, ο αριθμός επιχείρημα.
Είναι μια μεταβλητή ακεραίου τύπου και έτσι, όπως μπορείτε να φανταστείτε, αν έχουμε δύο πράγματα
ότι θα πάμε να βρουν τι είναι δακτυλογραφημένες
και πόσα πράγματα η δακτυλογραφημένες χρήστη, argc είναι
θα μας πει πόσα γεμίσει ο χρήστης πληκτρολογήσει.
Γι 'αυτό σας δίνει μια σειρά από τα επιχειρήματα της γραμμής εντολών χρήστη
δακτυλογραφημένες όταν εκτελείται το πρόγραμμα.
Έτσι, αν το πρόγραμμά σας είναι τρέξει dot κάθετος άπληστοι,
και στο εσωτερικό των άπληστων σας προγραμματίσετε κύρια λειτουργία σας
έχει την δήλωση int main int argc, κορδόνι argv αγκύλες, στη συνέχεια,
argc σε αυτή την περίπτωση είναι ένα.
Τώρα παρατηρήσετε δεν το κάνουμε μετράνε πόσα πράγματα
ο χρήστης πληκτρολογήσει μετά το όνομα του προγράμματος.
Το ίδιο το όνομα του προγράμματος μετράει ως επιχείρημα της γραμμής εντολών.
>> Έτσι dot κάθετος άπληστοι, σε Η υπόθεση αυτή, argc είναι ένας.
Αν ο χρήστης πληκτρολογήσει κάθετο άπληστοι 1024 CS50 στη γραμμή εντολών, argc σε αυτή την περίπτωση
θα είναι τρεις.
Και ξέρουμε αυτό, επειδή ο τρόπος ότι η κατανομή μεταξύ των χορδών
ανιχνεύεται αν υπάρχει ένας χώρος ή μια καρτέλα,
ή κάτι τέτοιο μεταξύ τους.
Έτσι, κάθε ποσό του κενού χώρου, τα λεγόμενα, μεταξύ των τιμών πληκτρολογήσει γραμμής εντολών
δείχνει πόσοι είναι εκεί.
Έτσι dot κάθετος άπληστοι διάστημα 1024 χώρο CS50, argc, στην περίπτωση αυτή, είναι τρία.
>> Argv είναι το διάνυσμα επιχειρήματος.
Φορέα, από τον τρόπο, είναι ακριβώς μια άλλη λέξη για μια σειρά,
και αυτό είναι ένας πίνακας που αποθηκεύει χορδές.
Μία κλωστή ανά στοιχείο, το οποίο είναι οι χορδές που ο χρήστης στην πραγματικότητα
πληκτρολογήσει στη γραμμή εντολών όταν το πρόγραμμα εκτελέστηκε.
Τώρα, όπως είναι η περίπτωση με οποιαδήποτε σειρά, αν
Υπενθυμίζουμε από τη συζήτηση μας πίνακες, το πρώτο στοιχείο της argv
είναι πάντα πρόκειται να βρεθεί στο argv αγκύλη μηδέν.
Αυτός είναι ο πρώτος δείκτης του πίνακα argv.
Έτσι ώστε will-- και στην πραγματικότητα, ότι βούληση πάντα να είναι το όνομα του προγράμματος,
θα είναι πάντα να βρίσκεται σε argv αγκύλη μηδέν.
>> Το τελευταίο στοιχείο της argv βρίσκεται πάντα στο argv αγκύλες argc μείον ένα.
Βλέπετε γιατί;
Θυμηθείτε πόσα στοιχεία υπάρχουν σε αυτή τη σειρά.
Λοιπόν, ξέρουμε ότι είναι that-- argc αριθμός των στοιχείων.
Αν ο χρήστης πληκτρολογήσει τρία πράγματα η γραμμή εντολών, argc είναι τρεις.
Αλλά επειδή σε γ, όταν δουλεύουμε με συστοιχίες, κάθε στοιχείο της συστοιχίας,
ή μάλλον οι δείκτες η συστοιχία, ξεκινούν από το μηδέν.
Αν έχουμε τρία στοιχεία σε μας σειρά, έχουμε ένα στοιχείο στο argv μηδέν,
ένα στοιχείο σε ένα argv, και ένα στοιχείο στο argv δύο.
Δεν υπάρχει κανένα στοιχείο στο argv τρία, και μια σειρά μεγέθους τρία.
Έτσι, γι 'αυτό το τελευταίο στοιχείο argv μπορεί πάντα
να βρεθεί στην πλατεία argv argc παρένθεση μείον ένα.
>> Ας αναλάβει τις εκτελεί χρήστη ο άπληστος πρόγραμμα follows--
αν πληκτρολογήσετε την εντολή-γραμμή dot slash άπληστοι διάστημα 1024 CS50 χώρο,
και για οποιονδήποτε λόγο έχουμε ήδη ετοιμάσει άπληστοι πρόγραμμά μας
να γνωρίζουν και να συνεργαστεί με αυτούς τα επιχειρήματα της γραμμής εντολών.
Εμείς δεν είχαν προηγουμένως όταν δουλέψαμε σε αυτό το άπληστο πρόβλημα,
αλλά ας πούμε ότι έχουμε τώρα τροποποιημένο έτσι ώστε να κάνουμε τη διαδικασία
τα επιχειρήματα της γραμμής εντολών με κάποιο τρόπο.
Σε αυτήν την περίπτωση, argv μηδέν Είναι dot κάθετος άπληστοι.
Τι είναι argv ένα;
Λοιπόν, αυτό είναι το 1024, σωστά;
Είναι 1024, αλλά εδώ είναι ένα πραγματικά σημαντικό distinction--
Θυμάστε τον τύπο δεδομένων του argv;
>> Αποθηκεύει χορδές, έτσι δεν είναι;
Αλλά μοιάζει 1024 είναι ένας ακέραιος αριθμός.
Αυτό είναι ένα πολύ σημαντικό διάκριση, και είναι στην πραγματικότητα
πρόκειται να γίνει κάτι που θα ενδέχεται να αντιμετωπίσετε προβλήματα στη μετέπειτα.
Τα πάντα στο argv είναι αποθηκεύεται ως ένα string.
Έτσι, το περιεχόμενο argv ενός ατόμου είναι η χορδή ένα, μηδέν, δύο, τέσσερις,
που αποτελείται από τους τέσσερις χαρακτήρες.
Είναι σαν ο χρήστης να πληκτρολογήσει ένα, μηδέν, δύο, τέσσερις
ως μεμονωμένα γράμματα ή χαρακτήρες.
Δεν είναι ο ακέραιος 1024, και έτσι δεν μπορείτε άμεσα
εργαστείτε με αυτό λέγοντας int 1000, ή μάλλον int x ισούται με argv ένα μείον 24.
>> Διαισθητικά, μπορείτε να σκεφτείτε ότι όπως, εντάξει, καλά είναι 1.024 μείον 24,
έτσι το χ είναι ίσο με 1,000.
Αλλά στην πραγματικότητα, αυτό δεν είναι η περίπτωση, επειδή argv ένα είναι ένα string.
Το κορδόνι 1024.
Τώρα υπάρχει μια λειτουργία που μπορεί να είναι χρησιμοποιείται για να μετατρέψει χορδές σε ακέραιους αριθμούς.
Δεν θα το χαλάσω για σας τώρα, αλλά είμαι σίγουρος ότι Zamyla
θα είναι στην ευχάριστη θέση να σας πω γι 'αυτό σε η περιδιάβαση για ένα μελλοντικό πρόβλημα.
Αλλά μπορείτε επίσης να βρείτε προβλήματα like-- δικαιολογία
μου, τις λειτουργίες που θα το κάνετε αυτό στην αναφορά 50,
αν πας στον οδηγό αναφοράς μπορείτε να βρείτε μια λειτουργία που
θα κάνει αυτή τη μετατροπή για εσάς.
Αλλά και πάλι, στην περιδιάβαση για ένα μελλοντικό πρόβλημα,
Zamyla θα είναι στην ευχάριστη θέση να σας πω ποια είναι η λειτουργία
αυτό είναι ότι θα μετατρέψει το χορδή 1024 στον ακέραιο 1024.
>> Εντάξει, έτσι ώστε να προχωρήσει.
Έχουμε καλύψει argv μηδέν μας, έχουμε καλύψει ένα argv.
Τι είναι στο argv δύο;
CS50.
Αυτό είναι πιθανώς ένα αρκετά αυτονόητα.
Τι είναι στο argv τρεις;
Λοιπόν και πάλι, εμείς δεν γνωρίζουμε πραγματικά, έτσι δεν είναι;
Έχουμε μια σειρά από τρία μεγέθους, αυτό είναι το πώς πολλά στοιχεία που ο χρήστης
πληκτρολογήσει στη γραμμή εντολών, Έτσι, αν πάμε να argv τρεις,
είμαστε τώρα υπερβεί τα όρια του πίνακα μας.
Ο compiler θα μας επιτρέψει να το κάνουμε αυτό, δεν υπάρχει διαισθητική πρόβλημα με αυτό,
αλλά από την άποψη του τι πραγματικά συμβαίνει για να συμβεί αυτό, δεν ξέρω πραγματικά.
Εξαρτάται από το τι είναι που βρίσκεται στο μνήμης, όπου
argv τρείς θα αναμενόταν να είναι.
Και έτσι θα μπορούσαμε να καταλήξουμε να πάρει μακριά ατιμώρητος.
Πιο πιθανό από ό, τι δεν είναι, ιδιαίτερα όταν εργάζεστε με argv σε αντίθεση
σε οποιαδήποτε άλλη συστοιχία ότι είναι στο πρόγραμμά μας,
θα πρόκειται πιθανώς να υποφέρουν ένα σφάλμα κατάτμησης. Έτσι και πάλι,
Να είστε βέβαιος να μην υπερβούμε τα όρια συστοιχιών σας, ιδιαίτερα argv,
δεδομένο τον υψηλό βαθμό σημασία στα προγράμματά σας.
>> Είμαι ο Νταγκ Lloyd.
Αυτό είναι CS50.