1 00:00:00,000 --> 00:00:07,810 2 00:00:07,810 --> 00:00:09,840 >> JASON Hirschhorn: Καλώς ήρθατε, ο καθένας, την Εβδομάδα 6. 3 00:00:09,840 --> 00:00:14,790 Είμαι στην ευχάριστη θέση να σας δούμε όλους ζωντανός και καλά μετά Quiz 0, γιατί ξέρω ότι 4 00:00:14,790 --> 00:00:15,810 ήταν λίγο τραχιά. 5 00:00:15,810 --> 00:00:18,370 Αλλά ευτυχώς, όλοι έκανε απίστευτα καλά. 6 00:00:18,370 --> 00:00:21,680 Και έτσι αυτό είναι υπέροχο. 7 00:00:21,680 --> 00:00:25,840 Αν είστε στο τμήμα μου, έχω δώσει πιο από εσάς πίσω κουίζ σας ήδη. 8 00:00:25,840 --> 00:00:28,050 >> Ένα ζευγάρι από εσάς, είμαι συνάντηση μετά το μάθημα. 9 00:00:28,050 --> 00:00:32,360 Και αν είστε φοιτητής επέκτασης και δεν έχετε λάβει κουίζ σας πίσω 10 00:00:32,360 --> 00:00:35,490 ακόμα, TF σας είναι πιθανώς εργάζονται σε αυτό και η διαβάθμιση είναι, και θα το πάρει πίσω 11 00:00:35,490 --> 00:00:36,490 για να σας σύντομα. 12 00:00:36,490 --> 00:00:39,650 Έτσι, οι μαθητές επέκταση μου που είναι βλέποντας τώρα - ελπίζω να ζήσουν - 13 00:00:39,650 --> 00:00:42,880 Θα πάρει κουίζ σας σύντομα, καθώς και. 14 00:00:42,880 --> 00:00:45,670 >> Το πρόγραμμά μας για σήμερα είναι η εξής. 15 00:00:45,670 --> 00:00:50,170 Κατ 'αρχάς, θα πάμε να πάει πέρα ​​από μερικές πόρους που CS50 παρέχει σε σας. 16 00:00:50,170 --> 00:00:54,590 Εμείς πάμε για να πάει πάνω Quiz 0 επόμενο, και Θα απαντήσει σε οποιεσδήποτε ερωτήσεις κανέναν 17 00:00:54,590 --> 00:00:57,360 έχει περίπου ιδιαίτερα προβλήματα. 18 00:00:57,360 --> 00:01:02,050 Και τότε, θα πρέπει να πηγαίνει πάνω file I / O και το πρόβλημα που 5. 19 00:01:02,050 --> 00:01:07,360 Αυτά τα δύο τελευταία θέματα θα λάβει μέχρι το μεγαλύτερο μέρος του τμήματος σήμερα. 20 00:01:07,360 --> 00:01:11,680 >> Έβαλα τη λίστα αυτή κάθε εβδομάδα ως υπενθύμιση σε όλους σας, αλλά και των βασικών 21 00:01:11,680 --> 00:01:14,650 τμήμα, έχουμε μόνο 90 ​​λεπτά - εμείς δεν είναι σε θέση να καλύπτει τα πάντα που έχω 22 00:01:14,650 --> 00:01:16,280 θα ήθελαν να καλύψει για σας παιδιά. 23 00:01:16,280 --> 00:01:21,170 Αλλά έχουμε έναν τόνο των πόρων για την να αξιοποιήσει, όπως θα έχετε να ξέρετε 24 00:01:21,170 --> 00:01:24,000 το υλικό και την εργασία μέσω το πρόβλημά σας θέτει. 25 00:01:24,000 --> 00:01:30,810 >> Μια υπενθύμιση που έχω σε απευθείας σύνδεση ένα κείμενο κουτί, που έχει συσταθεί για να συμπληρώσετε αν 26 00:01:30,810 --> 00:01:33,250 έχετε οποιαδήποτε σχόλια για μένα, τόσο θετικές όσο και 27 00:01:33,250 --> 00:01:35,180 εποικοδομητικό, για το τμήμα. 28 00:01:35,180 --> 00:01:38,600 Αυτό URL βρίσκεται ακριβώς εδώ κάτω. 29 00:01:38,600 --> 00:01:43,250 Επομένως, σας παρακαλώ, πάρτε μια στιγμή αν έχετε κάποιο σχολίων, είτε κατά τη διάρκεια της τμήμα, 30 00:01:43,250 --> 00:01:48,030 ή μετά, ή μετά μπορείτε να παρακολουθήσετε το βίντεο σε απευθείας σύνδεση, να μου δώσετε τα σχόλιά σας. 31 00:01:48,030 --> 00:01:52,100 Πραγματικά, εκτιμώ οποιαδήποτε και όλα αυτά. 32 00:01:52,100 --> 00:01:55,730 >> Έτσι έχω ήδη έχουν μικρές συνομιλίες με πολλή μου 33 00:01:55,730 --> 00:01:59,350 μαθητές σε όλη τη διάρκεια της εβδομάδας - όπως εγώ το χέρι πίσω κουίζ, μιλώντας για το 34 00:01:59,350 --> 00:02:01,480 Φυσικά, βλέποντας πώς κάνεις. 35 00:02:01,480 --> 00:02:05,120 Και ένα θέμα έχει έρθει πάνω και πάνω μιλάμε για - σε 36 00:02:05,120 --> 00:02:05,660 Ειδικότερα - 37 00:02:05,660 --> 00:02:07,710 πρόβλημα θέτει. 38 00:02:07,710 --> 00:02:13,090 Και έχω έγκλειστα αυτό το θέμα στον πίνακα δεξιά τώρα. 39 00:02:13,090 --> 00:02:16,630 >> Ουσιαστικά, υπάρχει μια διαφορά μεταξύ στροφή σε κάτι που είναι 40 00:02:16,630 --> 00:02:19,590 γίνεται σωστά και κάτι ότι γίνεται καλά. 41 00:02:19,590 --> 00:02:22,920 Οι περισσότεροι άνθρωποι έχουν κάνει φανταστική από την άποψη της ορθότητας - 42 00:02:22,920 --> 00:02:25,460 5 ή 4 για όλες τις psets. 43 00:02:25,460 --> 00:02:27,930 Οι περισσότεροι άνθρωποι παίρνουν εκείνες όλη την ώρα. 44 00:02:27,930 --> 00:02:31,150 >> Ωστόσο, μόνο και μόνο επειδή έχετε κάνει κάτι σωστό δεν σημαίνει ότι έχετε 45 00:02:31,150 --> 00:02:34,450 κάνει κάτι τόσο κομψά, ή αποτελεσματικά, είτε ως καθαρά όπως σας 46 00:02:34,450 --> 00:02:35,270 θα μπορούσε να κάνει. 47 00:02:35,270 --> 00:02:36,790 Και αυτό είναι ό, τι ο σχεδιασμός - 48 00:02:36,790 --> 00:02:39,230 και σε μικρότερο βαθμό, το στυλ - 49 00:02:39,230 --> 00:02:40,450 άξονες είναι για. 50 00:02:40,450 --> 00:02:45,130 Είμαι, λοιπόν, σε όλους σας πιέζει, και άλλα TFs πιέζουν εσείς, όχι μόνο για τη σειρά 51 00:02:45,130 --> 00:02:48,320 σε πράγματα που είναι σωστές, αλλά γυρίστε στα πράγματα που είναι κωδικοποιημένα καλά. 52 00:02:48,320 --> 00:02:53,060 >> Δεν κάνει περιττές ΓΙΑ βρόχους, Δεν εκ νέου υπολογισμό των μεταβλητών, αν 53 00:02:53,060 --> 00:02:53,800 δεν έχετε να. 54 00:02:53,800 --> 00:02:58,520 Για παράδειγμα, κοιτάζοντας πίσω στο πρόβλημα που 4, κατά την τοποθέτηση των τούβλων για την 55 00:02:58,520 --> 00:03:03,070 οθόνη, κάθε γραμμή - κάθε τούβλο σε ένα δεδομένη σειρά έχει την ίδια y-συντεταγμένη - 56 00:03:03,070 --> 00:03:04,390 το ίδιο ύψος συντεταγμένων. 57 00:03:04,390 --> 00:03:07,930 >> Έτσι ώστε y-συντεταγμένη δεν χρειάζεται να υπολογίζεται εντός του εσωτερικού 58 00:03:07,930 --> 00:03:11,070 ένθετα ΓΙΑ βρόχο που πιθανόν χρησιμοποιείται να θέσει τα τούβλα στην οθόνη. 59 00:03:11,070 --> 00:03:14,030 Χρειάζεται μόνο να υπολογίζονται κάθε φορά που ενεργοποιείται μια γραμμή, ή 60 00:03:14,030 --> 00:03:15,200 μετακινείται προς τα κάτω μια γραμμή. 61 00:03:15,200 --> 00:03:19,760 Έτσι λένε, αν υπάρχουν 10 τούβλα σε ένα σειρά, κάθε τούβλο μπορεί να έχουν την ίδια 62 00:03:19,760 --> 00:03:22,260 y-συντεταγμένη, και ότι η y-συντεταγμένη μπορεί απλά να υπολογιστεί 63 00:03:22,260 --> 00:03:23,550 μία φορά για όλα αυτά. 64 00:03:23,550 --> 00:03:27,810 >> Δεν χρειάζεται να υπολογιστεί 10 φορές, ούτε ότι η ανάγκη υπολογισμού 65 00:03:27,810 --> 00:03:30,220 να συμβεί στην πραγματική κλήση της συνάρτησης - 66 00:03:30,220 --> 00:03:33,020 η νέα gracked κλήση της συνάρτησης. 67 00:03:33,020 --> 00:03:37,820 Έτσι, αν αυτό ήταν μια μικρή σύγχυση για σας, πιο γενικά, πράγματα που 68 00:03:37,820 --> 00:03:40,730 Δεν χρειάζεται να συμβεί κάθε φορά θα περάσουν από ένα βρόχο ΓΙΑ δεν θα πρέπει να 69 00:03:40,730 --> 00:03:42,900 βάλει μέσα στο βρόχο ΓΙΑ, και δεν θα πρέπει να συμβαίνει κάθε φορά που θα πάτε 70 00:03:42,900 --> 00:03:44,080 μέσω του βρόχου FOR. 71 00:03:44,080 --> 00:03:49,270 >> Ένα άλλο καλό παράδειγμα σχεδίου που είδαμε στην Εβδομάδα 3 για 15, θα μπορούσατε να κρατήσετε 72 00:03:49,270 --> 00:03:50,500 κομμάτι του μηδενός. 73 00:03:50,500 --> 00:03:53,600 Έτσι, όταν η προετοιμασία του σκάφους, σας αποθηκεύσετε - σε μια καθολική μεταβλητή, ίσως - 74 00:03:53,600 --> 00:03:56,140 το χ και y-συντεταγμένη της μηδενικής. 75 00:03:56,140 --> 00:03:57,520 Και στη συνέχεια, κάθε φορά που - 76 00:03:57,520 --> 00:04:00,310 σε συνάρτηση με την κίνησή σας, κάθε φορά που κάνετε μια επιτυχημένη κίνηση, μπορείτε να ενημερώσετε το 77 00:04:00,310 --> 00:04:02,040 θέση του μηδέν. 78 00:04:02,040 --> 00:04:06,240 >> Αυτό θα σας σώσει από το να έχουν να κάνουν φωλιασμένα for για να κοιτάξετε μέσα από το 79 00:04:06,240 --> 00:04:10,700 επιβιβάζονται κάθε φορά σε συνάρτηση με την κίνησή σας και να βρει το μηδέν, ή να βρείτε το πλακάκι, 80 00:04:10,700 --> 00:04:12,460 και στη συνέχεια να ελέγξει τι είναι δίπλα του. 81 00:04:12,460 --> 00:04:16,329 Αντ 'αυτού, έχετε τη θέση του μηδέν, μπορείτε απλά να δούμε πάνω, κάτω, 82 00:04:16,329 --> 00:04:21,160 και προς τα αριστερά και δεξιά του για να βρει το κεραμίδι που ψάχνατε. 83 00:04:21,160 --> 00:04:24,970 >> Έτσι, όσον αφορά τα προγράμματα που είμαστε γραπτώς, ποτέ δεν είσαι αρκετά μεγάλος 84 00:04:24,970 --> 00:04:28,580 ότι ορισμένες από αυτές τις αποφάσεις για το σχεδιασμό είναι πραγματικά πρόκειται να παρεμποδίσει σας 85 00:04:28,580 --> 00:04:31,670 πρόγραμμα, ή να το κάνετε να τρέχει πιο αργά, ή ίσως ακόμη και να τρέξει έξω από τη μνήμη. 86 00:04:31,670 --> 00:04:35,030 Αλλά είμαστε ακόμα πιέζει εσείς να γράψω όπως το κομψό και 87 00:04:35,030 --> 00:04:36,450 αποδοτικό κώδικα όσο το δυνατόν. 88 00:04:36,450 --> 00:04:39,910 >> Έτσι, αν το κάνετε καταλήγουν γράφοντας πράγματα που έχουν σημαντικά μεγαλύτερο 89 00:04:39,910 --> 00:04:44,660 το πεδίο εφαρμογής, που θα συνταχθεί με καλή σχεδιασμό πέραν του ότι είναι σωστή. 90 00:04:44,660 --> 00:04:46,300 Έτσι, ένας αριθμός που έχετε έφερε ότι έξω. 91 00:04:46,300 --> 00:04:48,560 Αυτό είναι κάτι που ψάχνουμε - κάτι που θα πάμε να συνεχίσουμε να 92 00:04:48,560 --> 00:04:49,840 πιέζετε τα παιδιά του. 93 00:04:49,840 --> 00:04:52,460 >> Αν έχετε ποτέ οποιεσδήποτε ερωτήσεις σχετικά με το σχεδιασμό του προγράμματός σας, μη διστάσετε 94 00:04:52,460 --> 00:04:56,870 να φτάσει σε μένα, και είμαι στην ευχάριστη θέση να με τα πόδια μέσα από το πρόγραμμά σας με σας, 95 00:04:56,870 --> 00:05:01,320 και να επισημάνω μερικά από το σχεδιασμό αποφάσεις σας και να σας δώσει μερικές 96 00:05:01,320 --> 00:05:06,240 προτάσεις για το πώς να κάνουν ακόμη καλύτερες αποφάσεις σχεδιασμού. 97 00:05:06,240 --> 00:05:08,870 >> Έτσι θα πάμε για να προχωρήσουμε να μιλάμε για Quiz 0. 98 00:05:08,870 --> 00:05:11,300 Πριν το κάνουμε αυτό, κάνει κανείς απορίες σχετικά με το τι 99 00:05:11,300 --> 00:05:14,252 Έχω καλύπτονται μέχρι τώρα; 100 00:05:14,252 --> 00:05:21,500 >> [Θρόισμα NOISE] 101 00:05:21,500 --> 00:05:22,750 >> JASON Hirschhorn: Επτά δευτερόλεπτα. 102 00:05:22,750 --> 00:05:23,250 OK. 103 00:05:23,250 --> 00:05:24,970 Ας μιλήσουμε για Quiz 0 για λίγο. 104 00:05:24,970 --> 00:05:26,700 Οι περισσότεροι από εσάς έχετε Quiz σας πίσω του 0. 105 00:05:26,700 --> 00:05:29,820 Αν δεν το κάνετε, ελπίζω μπορείτε να θυμηθείτε λίγο. 106 00:05:29,820 --> 00:05:34,770 Αλλά αν έχετε πάρει Quiz 0, τότε έχουν επίσης πρόσβαση στο PDF online σε 107 00:05:34,770 --> 00:05:35,890 οι λύσεις του δείγματος. 108 00:05:35,890 --> 00:05:39,480 >> Μήπως κάποιος έχει οποιεσδήποτε ερωτήσεις πρίν πηδάμε στο υλικό της εβδομάδας για 109 00:05:39,480 --> 00:05:41,520 ένα ιδιαίτερο πρόβλημα για Quiz 0 - 110 00:05:41,520 --> 00:05:44,630 γιατί η απάντηση είναι αυτό που είναι; 111 00:05:44,630 --> 00:05:47,255 Είναι κανείς σύγχυση για κάτι; 112 00:05:47,255 --> 00:05:50,230 Ακόμα κι αν έχεις το δικαίωμα πρόβλημα, αλλά Απλά θα ήθελα να σου το εξηγήσω λίγο 113 00:05:50,230 --> 00:05:52,640 Επιπλέον, είμαι στην ευχάριστη θέση να το πράξουν τώρα. 114 00:05:52,640 --> 00:05:57,800 >> Έτσι, ζήτησα από τα παιδιά σας να να έρθει προετοιμασμένος με κάποια 115 00:05:57,800 --> 00:05:59,440 σκέψεις για Quiz 0. 116 00:05:59,440 --> 00:06:02,660 Έτσι, ο οποίος θα ήθελε να μας πάρει ξεκίνησε με μια ερώτηση ή 117 00:06:02,660 --> 00:06:04,655 σχόλιο σχετικά με Quiz 0; 118 00:06:04,655 --> 00:06:07,435 119 00:06:07,435 --> 00:06:10,410 >> [PAPER θρόισμα] 120 00:06:10,410 --> 00:06:11,470 >> JASON Hirschhorn: Δεν είναι όλοι έκανε τέλεια. 121 00:06:11,470 --> 00:06:12,720 Έτσι ξέρω [γέλια] 122 00:06:12,720 --> 00:06:15,950 πρέπει να υπάρχουν κάποια ερωτήματα Quiz για 0. 123 00:06:15,950 --> 00:06:27,940 124 00:06:27,940 --> 00:06:28,590 OK. 125 00:06:28,590 --> 00:06:29,210 Ναι. 126 00:06:29,210 --> 00:06:29,600 Ompica. 127 00:06:29,600 --> 00:06:30,520 >> OMPICA: Αριθμός 10. 128 00:06:30,520 --> 00:06:33,560 >> JASON Hirschhorn: Αριθμός 10. 129 00:06:33,560 --> 00:06:35,400 Ποιο από τα δύο ήταν το νούμερο 10; 130 00:06:35,400 --> 00:06:35,840 >> OMPICA: Η - 131 00:06:35,840 --> 00:06:36,420 >> JASON Hirschhorn: I haven't - 132 00:06:36,420 --> 00:06:37,670 >> OMPICA: Η περιλαμβάνουν - 133 00:06:37,670 --> 00:06:40,060 134 00:06:40,060 --> 00:06:42,180 >> JASON Hirschhorn: Number 10 ήταν οκτώ για i - γραφή οκτώ έως i; 135 00:06:42,180 --> 00:06:42,980 >> OMPICA: Ναι. 136 00:06:42,980 --> 00:06:43,630 >> JASON Hirschhorn: OK. 137 00:06:43,630 --> 00:06:47,390 Έτσι, μια άλλη ερώτηση που θα μπορούσε να έχει ρώτησε ήταν είμαι προφητικό; 138 00:06:47,390 --> 00:06:48,630 Η απάντηση είναι ναι. 139 00:06:48,630 --> 00:06:52,060 Στο τμήμα πριν από το κουίζ, ρώτησα εσείς να κωδικοποιήσει τόσο Sterling και 140 00:06:52,060 --> 00:06:52,980 οκτώ έως i. 141 00:06:52,980 --> 00:06:54,770 Και οι δύο από αυτούς έτυχε να εμφανίζονται στο κουίζ. 142 00:06:54,770 --> 00:06:57,510 Έτσι, ελπίζουμε, θα καταβληθεί προσοχή σε αυτό. 143 00:06:57,510 --> 00:07:02,520 >> Και αν είχε, τότε θα πρέπει ίσως κάνει καλά σε αυτά τα δύο. 144 00:07:02,520 --> 00:07:06,030 Αλλά οκτώ έως i, δεν είχαμε πραγματικά κώδικα αυτό στην τάξη, αλλά ήταν, και πάλι, 145 00:07:06,030 --> 00:07:07,500 Έγινε στις εξετάσεις. 146 00:07:07,500 --> 00:07:13,270 Έτσι, ένα ζευγάρι από τα πράγματα να λάβουν σημειωθεί κατά την κωδικοποίηση οκτώ έως i. 147 00:07:13,270 --> 00:07:17,320 Το πρώτο πράγμα που, σύμφωνα με την ερώτηση, ήταν ότι θα έπρεπε να ελέγξετε αν το string 148 00:07:17,320 --> 00:07:20,300 ήταν ίση με null. 149 00:07:20,300 --> 00:07:28,060 >> Ένα ζευγάρι άνθρωποι προσπάθησαν να το ελέγξετε αργότερα για στο πρόγραμμα, αν s βραχίονα ήμουν - 150 00:07:28,060 --> 00:07:30,940 έτσι ώστε ένα συγκεκριμένο χαρακτήρα, καθόσον εγχόρδων - ήταν ίση με null. 151 00:07:30,940 --> 00:07:35,600 Αλλά να θυμάστε, ότι είναι ουσιαστικά μηδενική - είναι καλό να σκεφτούμε 152 00:07:35,600 --> 00:07:39,100 null ως μηδενικός δείκτης - ένας δείκτης στο μηδέν - 153 00:07:39,100 --> 00:07:40,920 κάπου στη μνήμη όπου δεν μπορείτε ποτέ να έχετε πρόσβαση. 154 00:07:40,920 --> 00:07:44,730 >> Έτσι, αν κάτι είναι ίση με null, μπορείτε ξέρετε ότι δεν έχει προετοιμαστεί, 155 00:07:44,730 --> 00:07:46,430 ή δεν υπάρχει τίποτα εκεί. 156 00:07:46,430 --> 00:07:50,950 Έτσι, s είναι ένα αστέρι char, s βραχίονα i είναι μια χαρα. 157 00:07:50,950 --> 00:07:57,410 Έτσι, είναι λογικό να συγκρίνουμε την τιμή null, αλλά δεν s βραχίονα i σε null. 158 00:07:57,410 --> 00:07:59,390 Αλλά και πάλι - έτσι ώστε να ήταν το πρώτο πράγμα που ότι θα έπρεπε να κάνει - 159 00:07:59,390 --> 00:08:03,510 ελέγξτε για να βεβαιωθείτε ότι έχετε πραγματικά πήρε μια πραγματική σειρά. 160 00:08:03,510 --> 00:08:08,020 >> Στη συνέχεια, θα ήθελε να πάει μέσα κάθε χαρακτήρα της συμβολοσειράς. 161 00:08:08,020 --> 00:08:12,500 Και έτσι αυτό θα ήταν σαν ένα στήριγμα s i, για παράδειγμα, αν θ είναι iterator σας. 162 00:08:12,500 --> 00:08:17,250 Και να λάβει το χαρακτήρα, και να πάρει την πραγματική του αξία. 163 00:08:17,250 --> 00:08:21,800 Έχετε αυτό αποθηκεύεται ως char, αλλά η τιμή ASCII για το μηδέν - 164 00:08:21,800 --> 00:08:23,010 μηδέν ως χαρακτήρας - 165 00:08:23,010 --> 00:08:25,450 δεν είναι στην πραγματικότητα ο ακέραιος αριθμός μηδέν. 166 00:08:25,450 --> 00:08:28,700 Είναι κάποιος άλλος αριθμός που μπορείτε να κοιτάζω προς τα πάνω στον πίνακα ASCII. 167 00:08:28,700 --> 00:08:30,790 >> Έτσι, ένας τρόπος για να διορθωθεί αυτό - ίσως ο καλύτερος τρόπος για τη διόρθωση 168 00:08:30,790 --> 00:08:33,760 ότι - έχει αφαιρεθεί κάτι από αυτό η τιμή του χαρακτήρα - 169 00:08:33,760 --> 00:08:35,140 μηδέν ως χαρακτήρας. 170 00:08:35,140 --> 00:08:38,490 Έτσι, μείον μόνη προσφορά, μηδέν, άλλο μόνη προσφορά. 171 00:08:38,490 --> 00:08:44,620 Αυτό θα πάρει ό, τι αριθμό που έχετε ως char, και να το πάρετε ίσο με 172 00:08:44,620 --> 00:08:46,720 ο αριθμός ως πραγματική ακέραιο. 173 00:08:46,720 --> 00:08:50,300 >> Και αυτό είναι πολύ παρόμοια με την προσέγγιση πολλοί άνθρωποι πήραν στο 174 00:08:50,300 --> 00:08:52,800 πρόβλημα που 2, με Καίσαρα και Viginere - 175 00:08:52,800 --> 00:08:55,160 αυτές αλγόριθμους κρυπτογράφησης, όταν είχαν τους εκ περιτροπής. 176 00:08:55,160 --> 00:08:59,210 Έτσι, μετά το έχετε ως ένα αριθμό από μηδέν έως εννέα, τότε - ανάλογα με την 177 00:08:59,210 --> 00:09:02,750 όπου πηγαίνει στον τελικό αριθμό - θα πρέπει να το πολλαπλασιάσετε 178 00:09:02,750 --> 00:09:04,120 από μια δύναμη του 10. 179 00:09:04,120 --> 00:09:07,340 >> Μερικοί άνθρωποι μετακινούνται από το πίσω μέρος στο μπροστά, και πολλαπλασιάζεται το άτομο 180 00:09:07,340 --> 00:09:08,940 αριθμό από μια δύναμη του 10. 181 00:09:08,940 --> 00:09:11,160 Μερικοί άνθρωποι μετακινούνται από το εμπρός προς τα πίσω - 182 00:09:11,160 --> 00:09:14,430 και έτσι πήρε την υψηλότερη αύξοντες αριθμούς πρώτο - 183 00:09:14,430 --> 00:09:18,190 και θα σώσει εκείνους σε μια παγκόσμια μεταβλητή μετρητή. 184 00:09:18,190 --> 00:09:20,880 Και στη συνέχεια, κάθε φορά μέσω του FOR βρόχο, πολλαπλασιάστε το γιγαντιαίο παγκόσμιο 185 00:09:20,880 --> 00:09:25,640 αντιμετώπιση μεταβλητή από 10, για να κάνει χώρο για το επόμενο χαρακτήρα. 186 00:09:25,640 --> 00:09:28,750 >> Έτσι, αυτό ήταν μια μικρή σύγχυση, χωρίς με το γράψιμο στον πίνακα. 187 00:09:28,750 --> 00:09:31,550 Αλλά το διάλυμα του δείγματος είναι στη διάθεσή σας. 188 00:09:31,550 --> 00:09:32,870 Αλλά αυτά ήταν τα μεγάλα πράγματα ψάχναμε. 189 00:09:32,870 --> 00:09:36,400 Επίσης, ο έλεγχος για να βεβαιωθείτε ότι κάθε ατομικό χαρακτήρα ήταν πράγματι μια 190 00:09:36,400 --> 00:09:39,780 χαρακτήρα μεταξύ μηδέν και εννέα, και όχι κάποιο άλλο χαρακτήρα, όπως ένα Α, 191 00:09:39,780 --> 00:09:41,160 για παράδειγμα. 192 00:09:41,160 --> 00:09:43,150 >> Αυτά ήταν τα πράγματα ψάχναμε στο εν λόγω ερώτημα. 193 00:09:43,150 --> 00:09:46,510 194 00:09:46,510 --> 00:09:47,980 Μήπως αυτό απαντήσω στην ερώτησή σας; 195 00:09:47,980 --> 00:09:49,320 >> OMPICA: Ναι. 196 00:09:49,320 --> 00:09:50,240 >> JASON Hirschhorn: OK. 197 00:09:50,240 --> 00:09:53,940 Υπάρχουν άλλα ζητήματα υπάρχει Κουίζ για 0; 198 00:09:53,940 --> 00:09:55,440 Τι γίνεται με τη σύνταξη; 199 00:09:55,440 --> 00:09:56,740 Όλοι κατάρτιση σωστά; 200 00:09:56,740 --> 00:09:58,370 Όχι. 201 00:09:58,370 --> 00:09:58,840 Υπήρχαν - 202 00:09:58,840 --> 00:10:01,010 [Γελάει] 203 00:10:01,010 --> 00:10:03,265 Οποιεσδήποτε ερωτήσεις σχετικά με την διαδικασία κατάρτισης; 204 00:10:03,265 --> 00:10:06,050 205 00:10:06,050 --> 00:10:06,966 Wow. 206 00:10:06,966 --> 00:10:11,090 >> [PAPER θρόισμα] 207 00:10:11,090 --> 00:10:11,520 >> JASON Hirschhorn: Ναι. 208 00:10:11,520 --> 00:10:11,700 Michael. 209 00:10:11,700 --> 00:10:14,140 >> ΜΙΧΑΗΛ: Υπάρχει αριθμός 7 - τυχαίο; 210 00:10:14,140 --> 00:10:16,500 >> JASON Hirschhorn: Αριθμός 7. 211 00:10:16,500 --> 00:10:20,670 Ο αριθμός 7 ήταν να πάρει έναν τυχαίο ακέραιο. 212 00:10:20,670 --> 00:10:21,110 Εξαιρετικό. 213 00:10:21,110 --> 00:10:25,630 Έτσι, σας δίνεται ένα ακέραιο a και ακέραιος b, και θέλετε ένα τυχαίο 214 00:10:25,630 --> 00:10:28,710 ακέραιος αριθμός μεταξύ a και b. 215 00:10:28,710 --> 00:10:31,740 Μπορούμε να γράφουν πραγματικά αυτό το ένα για το διοικητικό συμβούλιο, διότι αυτό 216 00:10:31,740 --> 00:10:33,320 Ήταν μία γραμμή κώδικα - 217 00:10:33,320 --> 00:10:34,390 ένας τρόπος για να το κάνει. 218 00:10:34,390 --> 00:10:37,810 >> Έτσι μας δίνεται drand ως λειτουργία που θα μπορούσε να χρησιμοποιήσει. 219 00:10:37,810 --> 00:10:38,820 Και τι drand - 220 00:10:38,820 --> 00:10:40,290 αν υποτεθεί ότι είναι ήδη σπαρθεί - 221 00:10:40,290 --> 00:10:42,316 τι drand επιστρέψει; 222 00:10:42,316 --> 00:10:44,840 >> ΜΙΧΑΗΛ: Ο πλωτήρας μεταξύ 0,0 και 1,0. 223 00:10:44,840 --> 00:10:45,530 >> JASON Hirschhorn: Ένας αριθμός - ναι. 224 00:10:45,530 --> 00:10:47,910 Ένας αριθμός μεταξύ 0 και 1. 225 00:10:47,910 --> 00:10:51,760 Και έτσι έχουμε β και. 226 00:10:51,760 --> 00:10:55,480 Και τότε έχουμε τυχαίων αριθμών μεταξύ 0 και 1 που μας δόθηκε από drand. 227 00:10:55,480 --> 00:11:01,480 228 00:11:01,480 --> 00:11:06,630 Μερικοί άνθρωποι προσπάθησαν να θέσει b, ή β μείον α, ή κάτι μέσα εκείνα 229 00:11:06,630 --> 00:11:07,960 παρενθέσεις. 230 00:11:07,960 --> 00:11:11,210 Αυτό θα σήμαινε ότι είναι επιχειρήματα για αυτή τη λειτουργία. 231 00:11:11,210 --> 00:11:13,450 >> drand δεν λαμβάνει κανένα επιχείρημα - όπως κάνει GetString 232 00:11:13,450 --> 00:11:14,330 δεν λαμβάνουν κανένα επιχείρημα. 233 00:11:14,330 --> 00:11:16,600 Έτσι είναι απλά ανοίξτε paren, κοντά Paren - και ότι, από μόνη της, είναι 234 00:11:16,600 --> 00:11:17,330 η κλήση της συνάρτησης. 235 00:11:17,330 --> 00:11:19,770 Και αυτό σας δίνει έναν αριθμό μεταξύ 0 και 1. 236 00:11:19,770 --> 00:11:22,820 Φυσικά, έχουμε μια ολόκληρη σειρά ότι οι αριθμοί μπορεί να είναι μέσα 237 00:11:22,820 --> 00:11:28,470 >> Δηλαδή, αν b είναι 10 και είναι 5, που πραγματικά θέλουν έναν αριθμό με μια σειρά από 5. 238 00:11:28,470 --> 00:11:36,940 Έτσι, το επόμενο πράγμα που πρέπει να κάνουμε είναι πολλαπλασιάσουμε με το εύρος b μείον ένα. 239 00:11:36,940 --> 00:11:40,380 Έτσι, αν υποτεθεί ότι είναι πολλαπλασιάζεται. 240 00:11:40,380 --> 00:11:42,590 Και αυτό θα μας δώσει μια σειρά μέσα σε ένα δεδομένο εύρος. 241 00:11:42,590 --> 00:11:46,610 Και ότι η συγκεκριμένη περιοχή είναι η διαφορά μεταξύ β μείον ένα. 242 00:11:46,610 --> 00:11:50,030 >> Και, τέλος, ότι θα δώσει μόνο από - λένε ότι η περιοχή μεταξύ β μείον ένα 243 00:11:50,030 --> 00:11:52,520 είναι 5, που θα μας δώσει μια αριθμός από 0 έως 5. 244 00:11:52,520 --> 00:11:56,000 Αλλά αν μια είναι στην πραγματικότητα 5, πρέπει να ενισχύσει αυτή η σειρά μέχρι εκεί που είναι 245 00:11:56,000 --> 00:12:01,380 στην πραγματικότητα υποτίθεται ότι είναι, με την προσθήκη ενός. 246 00:12:01,380 --> 00:12:02,580 Έτσι ώστε να παίρνει τη λογική δικαιώματος. 247 00:12:02,580 --> 00:12:03,745 Και τότε, θα έχετε άλλη ερώτηση; 248 00:12:03,745 --> 00:12:04,547 >> ΜΙΧΑΗΛ: Όχι. 249 00:12:04,547 --> 00:12:06,010 Νιώθω πραγματικά ηλίθιος τώρα. 250 00:12:06,010 --> 00:12:06,405 [Γελάει] 251 00:12:06,405 --> 00:12:06,730 >> JASON Hirschhorn: Όχι. 252 00:12:06,730 --> 00:12:08,640 Μην αισθάνεστε πραγματικά ηλίθιος. 253 00:12:08,640 --> 00:12:10,560 Ένας αριθμός των ατόμων που αγωνίστηκαν με αυτήν την ερώτηση. 254 00:12:10,560 --> 00:12:13,920 Και τότε, το άλλο ερώτημα είναι, drand, είπατε, σας δίνει μια float - 255 00:12:13,920 --> 00:12:14,940 επιστρέφει ένα πλωτήρα. 256 00:12:14,940 --> 00:12:18,020 Αλλά αυτή η λειτουργία στην πραγματικότητα ζήτησε ένας ακέραιος για να επιστραφούν. 257 00:12:18,020 --> 00:12:23,700 >> Δεν χρειάζεται να ρίξει αυτό ρητά σε ένα ακέραιο, επειδή αυτά 258 00:12:23,700 --> 00:12:29,090 εργασίες θα το αντιμετωπίσουμε όπως όλα ένα float - ως αριθμό κινητής υποδιαστολής. 259 00:12:29,090 --> 00:12:31,570 Όπως αυτό θα - ακόμη και αν αυτό είναι ένας ακέραιος, αυτό θα 260 00:12:31,570 --> 00:12:32,890 πολλαπλασιάζονται σωστά. 261 00:12:32,890 --> 00:12:34,000 Όλα ο πολλαπλασιασμός θα λειτουργήσει. 262 00:12:34,000 --> 00:12:35,060 Δεν χρειάζεται να το ρίχνει εδώ. 263 00:12:35,060 --> 00:12:36,480 Στην πραγματικότητα, δεν πρέπει να το ρίξει. 264 00:12:36,480 --> 00:12:37,310 >> Αυτό θα ήταν - 265 00:12:37,310 --> 00:12:40,750 αν θα ρίξει μια σειρά που είναι μεταξύ 0 και 1 - 266 00:12:40,750 --> 00:12:42,680 έναν τυχαίο αριθμό, ένα πλωτό σημείο - 267 00:12:42,680 --> 00:12:47,850 τότε είτε θα είναι μόνο 0 ή 1, έτσι θα χάσετε όλα αυτά ακρίβειας. 268 00:12:47,850 --> 00:12:50,120 Αλλά στο τέλος, όταν θα επιστρέψετε, παίρνει αυτόματα 269 00:12:50,120 --> 00:12:51,620 έστειλε πίσω ως ακέραιος. 270 00:12:51,620 --> 00:12:56,870 Έτσι, δεν χρειάζεται να κάνετε ότι casting τον εαυτό σας. 271 00:12:56,870 --> 00:13:00,810 >> Έτσι, αυτό ήταν η απάντηση το ζήτημα αυτό, ο αριθμός 7. 272 00:13:00,810 --> 00:13:02,190 Οποιεσδήποτε άλλες ερωτήσεις σχετικά με Quiz 0; 273 00:13:02,190 --> 00:13:03,300 Ναι, Annie. 274 00:13:03,300 --> 00:13:05,050 >> ANNIE: Όταν χρησιμοποιούμε αναδρομικές - 275 00:13:05,050 --> 00:13:07,850 όταν χρησιμοποιούμε επαναληπτική βρόχους; 276 00:13:07,850 --> 00:13:10,210 >> JASON Hirschhorn: Όταν δεν χρησιμοποιείτε recursive - τόσο γενικότερα, η 277 00:13:10,210 --> 00:13:14,110 πλεονεκτήματα και τα μειονεκτήματα της αναδρομής σε σχέση με μια επαναληπτική προσέγγιση. 278 00:13:14,110 --> 00:13:17,110 Μπορεί κανείς να προσφέρει μια pro ή con; 279 00:13:17,110 --> 00:13:19,460 Παρακαλούμε; 280 00:13:19,460 --> 00:13:20,140 Δεν μπορεί κανείς. 281 00:13:20,140 --> 00:13:22,526 Ποιος μπορεί να προσφέρει μια pro ή con; 282 00:13:22,526 --> 00:13:26,963 >> [PAPER θρόισμα] 283 00:13:26,963 --> 00:13:29,730 >> ΦΟΙΤΗΤΗΣ 1: Αναδρομική είναι λιγότερο κωδικοποίηση - λιγότερη πληκτρολόγηση; 284 00:13:29,730 --> 00:13:33,170 >> JASON Hirschhorn: Έτσι, γενικά, αναδρομή, ιδίως, μια λειτουργία - 285 00:13:33,170 --> 00:13:35,750 ή έναν αλγόριθμο, όπως συγχώνευση είδος - το οποίο προσφέρεται 286 00:13:35,750 --> 00:13:37,300 σε μια αναδρομική προσέγγιση - 287 00:13:37,300 --> 00:13:40,710 θα μπορούσε να είναι πιο απλή να κωδικοποιήσει αναδρομικά. 288 00:13:40,710 --> 00:13:43,940 Και απλά να έχει περισσότερο νόημα να το κάνουν αναδρομικά. 289 00:13:43,940 --> 00:13:46,230 Έτσι, αυτό θα είναι ένα pro σε αναδρομή. 290 00:13:46,230 --> 00:13:46,610 Άλλοι; 291 00:13:46,610 --> 00:13:47,467 Ναι; 292 00:13:47,467 --> 00:13:49,240 >> ΦΟΙΤΗΤΗΣ 2: Con σε αναδρομή - 293 00:13:49,240 --> 00:13:50,940 Χρησιμοποιεί περισσότερη μνήμη. 294 00:13:50,940 --> 00:13:52,200 >> JASON Hirschhorn: Έτσι ακριβώς δεξιά. 295 00:13:52,200 --> 00:13:55,720 Μια αναδρομική συνάρτηση θα συνεχίσουμε να προσθέτουμε στοίβα πλαισίων στη στοίβα. 296 00:13:55,720 --> 00:13:59,690 Έτσι, αν είστε λειτουργίας σε πολλά αριθμούς, και πρέπει να καλέσετε αυτό 297 00:13:59,690 --> 00:14:02,560 λειτουργούν πολλά, τότε σίγουρα θα καταλαμβάνουν περισσότερη μνήμη, ενώ 298 00:14:02,560 --> 00:14:05,810 μια επαναληπτική προσέγγιση θα βάλει μόνο ένα στοίβα πλαίσιο στη στοίβα, γιατί 299 00:14:05,810 --> 00:14:08,420 όλα αυτά συμβαίνουν μέσα σε μία λειτουργία. 300 00:14:08,420 --> 00:14:11,010 >> Οποιαδήποτε άλλα πλεονεκτήματα και τα μειονεκτήματα; 301 00:14:11,010 --> 00:14:11,500 Ναι. 302 00:14:11,500 --> 00:14:12,550 >> ΦΟΙΤΗΤΗΣ 3: Πλεονεκτήματα για αναδρομή. 303 00:14:12,550 --> 00:14:15,950 Δεν χρειάζεται να εκτιμήσει εκ των προτέρων πόσες φορές η 304 00:14:15,950 --> 00:14:17,660 κωδικός έπρεπε να επαναληφθεί. 305 00:14:17,660 --> 00:14:22,810 Μπορείτε να έχετε ένα προκαθορισμένο αριθμό φορές που θα πρέπει να επαναλάβει, τότε 306 00:14:22,810 --> 00:14:26,420 αναδρομή είναι καλύτερα, γιατί παίρνει αυτό το αποτέλεσμα. 307 00:14:26,420 --> 00:14:27,780 >> JASON Hirschhorn: Νομίζω ότι είναι αλήθεια. 308 00:14:27,780 --> 00:14:30,770 Αλλά νομίζω ότι και στις δύο περιπτώσεις θα κάνατε ποτέ - 309 00:14:30,770 --> 00:14:33,290 θα πάρετε πιθανώς μερικά είσοδο από το χρήστη. 310 00:14:33,290 --> 00:14:35,990 Ή αυτή η λειτουργία θα έχουμε κάποια στοιχεία που θα καθορίσει πόσες φορές 311 00:14:35,990 --> 00:14:36,730 πρέπει να τρέξει. 312 00:14:36,730 --> 00:14:39,520 Έτσι, γενικά, δεν θα σκληρό κώδικα - ακόμη και σε μια επαναληπτική προσέγγιση - πώς 313 00:14:39,520 --> 00:14:40,940 πολλές φορές ότι loop θα εκτελείται. 314 00:14:40,940 --> 00:14:46,100 315 00:14:46,100 --> 00:14:48,670 >> Μήπως έχετε ένα άλλο θα ήταν σκεφτόμαστε, Annie; 316 00:14:48,670 --> 00:14:49,330 OK. 317 00:14:49,330 --> 00:14:51,650 Έτσι, αυτά είναι ίσως τα δύο - 318 00:14:51,650 --> 00:14:54,370 το μεγαλύτερο pro και το μεγαλύτερο con σε μια αναδρομική σχέση 319 00:14:54,370 --> 00:14:57,080 μια επαναληπτική προσέγγιση. 320 00:14:57,080 --> 00:14:57,690 OK. 321 00:14:57,690 --> 00:14:59,465 Οτιδήποτε άλλο στο Quiz 0; 322 00:14:59,465 --> 00:15:08,940 323 00:15:08,940 --> 00:15:09,920 >> Ας προχωρήσουμε. 324 00:15:09,920 --> 00:15:15,260 File I / O. Υπάρχει μια υπέροχη μικρή αυτή την εβδομάδα σχετικά με το αρχείο I / O που ελπίζουμε 325 00:15:15,260 --> 00:15:19,270 έχετε προσέξει πολλαπλές φορές, και θαύμαζε. 326 00:15:19,270 --> 00:15:22,910 Μια πολλή δουλειά πήγε σε αυτό, και έχω ακούσει ότι είναι τρομερά χρήσιμο. 327 00:15:22,910 --> 00:15:25,740 Θα περιλαμβάνονται επίσης τη σύνδεση σε αυτή τη διαφάνεια, σε περίπτωση που δεν είχαν μια 328 00:15:25,740 --> 00:15:29,160 ευκαιρία να το παρακολουθήσουν 10 φορές. 329 00:15:29,160 --> 00:15:35,280 >> Έτσι, θέλουμε να πάμε για λίγο πάνω από το σημαντικά βήματα για το άνοιγμα και την εργασία 330 00:15:35,280 --> 00:15:38,400 με τα αρχεία, και στη συνέχεια πρόκειται να βουτήξει σε μια κωδικοποίηση πρόβλημα πριν 331 00:15:38,400 --> 00:15:40,400 εξετάζοντας το σύνολο του προβλήματος. 332 00:15:40,400 --> 00:15:44,330 Έτσι και πάλι, Πάω να θέσει αυτό επάνω η οθόνη, αλλά Πάω να μιλήσω για 333 00:15:44,330 --> 00:15:47,630 μόλις ένα λεπτό για το τι είμαστε κάνουμε εδώ με το αρχείο I/O-- 334 00:15:47,630 --> 00:15:49,090 Τι σημαίνει αυτό; 335 00:15:49,090 --> 00:15:55,280 >> Αυτό σημαίνει ότι μπορούμε να δημιουργήσουμε μας προγράμματα, και στη συνέχεια να έχουν τα προγράμματά μας 336 00:15:55,280 --> 00:16:00,370 εξόδου, και δεν έχουν κάνει καμία επίπτωση στις ο κόσμος έξω από το πρόγραμμά μας. 337 00:16:00,370 --> 00:16:04,630 Αλλά όταν αρχίσουν να εργάζονται με αρχεία - τόσο την ανάγνωση τους και τη δημιουργία 338 00:16:04,630 --> 00:16:10,460 τους - μπορούμε να έχουμε κάποια επίδραση στη κόσμο έξω από το πρόγραμμά μας. 339 00:16:10,460 --> 00:16:15,440 >> Ακριβώς όπως και αν το Microsoft Word δεν ήταν σε θέση να προβεί σε έγγραφα του Word, τότε 340 00:16:15,440 --> 00:16:18,710 φορά Microsoft Word κλείσει, όλοι σας Οι εργασίες θα πρέπει να φύγει, και θα 341 00:16:18,710 --> 00:16:19,740 πραγματικά είναι άχρηστο. 342 00:16:19,740 --> 00:16:23,620 Εμείς τελικά δεν θέλουν να είναι σε θέση να γράφουν τα προγράμματα που μπορούν να επηρεάσουν την 343 00:16:23,620 --> 00:16:31,350 κόσμο γύρω τους, τόσο με τη λήψη σε πολύπλοκες είσοδοι - από την άποψη των αρχείων και 344 00:16:31,350 --> 00:16:37,080 μέσω αρχείων, καθώς επίσης και δημιουργώντας ενδιαφέροντα και αναγκάζοντας εξόδους - 345 00:16:37,080 --> 00:16:39,520 σε όρους διαφορετικούς τύπους αρχείων. 346 00:16:39,520 --> 00:16:43,730 >> Έτσι ώστε να είναι ο λόγος που αρχίζουν να μάθετε πώς να εργαστείτε με τα αρχεία. 347 00:16:43,730 --> 00:16:47,080 Πιο συγκεκριμένα, τι κάνουμε είναι ως εξής. 348 00:16:47,080 --> 00:16:47,680 Είναι πολύ απλό. 349 00:16:47,680 --> 00:16:51,530 Υπάρχουν μόνο μερικά βήματα, και αυτά που αναφέρονται εδώ σε αυτόν τον κωδικό. 350 00:16:51,530 --> 00:16:55,130 Έτσι θα πάμε για να περάσει αυτή η γραμμή κώδικα από τη γραμμή. 351 00:16:55,130 --> 00:16:57,630 >> Κατ 'αρχάς, μπορείτε να δείτε τόνισε - 352 00:16:57,630 --> 00:17:01,330 όταν εργάζεστε με ένα αρχείο, ανεξάρτητα από τον τύπο του αρχείου που είναι, 353 00:17:01,330 --> 00:17:02,670 θα πρέπει να το ανοίξετε. 354 00:17:02,670 --> 00:17:05,130 Και αυτό είναι με μια κλήση για να fopen - 355 00:17:05,130 --> 00:17:05,950 εδώ. 356 00:17:05,950 --> 00:17:07,980 Θα περιλαμβάνει το όνομα του αρχείου. 357 00:17:07,980 --> 00:17:11,930 Εάν το αρχείο δεν είναι στον κατάλογο σας, ή το φάκελο όπου το πρόγραμμα 358 00:17:11,930 --> 00:17:15,910 ζωή, τότε θα πρέπει επίσης να περιλαμβάνει μια διαδρομή όπου το αρχείο είναι. 359 00:17:15,910 --> 00:17:19,099 >> Εμείς πάμε να υποθέσουμε ότι αυτή η αρχείο που ονομάζεται "text.txt" - 360 00:17:19,099 --> 00:17:24,220 ένα απλό έγγραφο κειμένου - είναι η ίδιο φάκελο με το πρόγραμμα αυτό είναι. 361 00:17:24,220 --> 00:17:26,859 Έτσι, αυτό είναι ένα άλλο πράγμα που πρέπει να νου - ότι αν θέλετε να ανοίξετε ένα αρχείο 362 00:17:26,859 --> 00:17:30,050 κάπου αλλού, που πραγματικά χρειάζεστε να συμπεριλάβει τη θέση του. 363 00:17:30,050 --> 00:17:33,520 >> Δεύτερον, μπορείτε να περάσετε ένα επιχείρημα για να fopen, και αυτό είναι που θέλετε να κάνετε 364 00:17:33,520 --> 00:17:34,620 με το αρχείο. 365 00:17:34,620 --> 00:17:38,450 Υπάρχουν τρία κύρια επιχειρήματα που θα πάμε να περάσει στο fopen. 366 00:17:38,450 --> 00:17:40,060 Ποιος μπορεί να μου δώσει αυτά τα τρία; 367 00:17:40,060 --> 00:17:44,960 368 00:17:44,960 --> 00:17:47,130 Ποιος μπορεί να μου δώσει ένα από αυτά; 369 00:17:47,130 --> 00:17:48,130 Ναι. 370 00:17:48,130 --> 00:17:50,010 >> ΦΟΙΤΗΤΗΣ 4: Το όνομα του αρχείου; 371 00:17:50,010 --> 00:17:50,440 >> JASON Hirschhorn: Συγγνώμη. 372 00:17:50,440 --> 00:17:55,490 Τρία βασικά επιχειρήματα μπορείτε να περάσετε ως το δεύτερο επιχείρημα για fopen. 373 00:17:55,490 --> 00:17:57,060 Έχεις δίκιο - το όνομα του αρχείου είναι το πρώτο επιχείρημα. 374 00:17:57,060 --> 00:18:01,620 Αλλά το δεύτερο επιχείρημα είναι fopen γενικά τρεις χορδές, και - ναι. 375 00:18:01,620 --> 00:18:02,210 Aleja. 376 00:18:02,210 --> 00:18:03,490 >> ALEJA: Α για προσάρτησης. 377 00:18:03,490 --> 00:18:06,840 >> JASON Hirschhorn: A, εάν θέλετε να προστεθούν σε ένα αρχείο που υπάρχει ήδη. 378 00:18:06,840 --> 00:18:07,810 >> ΦΟΙΤΗΤΙΚΟ 5: R για ανάγνωση. 379 00:18:07,810 --> 00:18:09,930 >> JASON Hirschhorn: R, αν θέλετε να διαβάσετε από ένα αρχείο. 380 00:18:09,930 --> 00:18:10,670 >> ΦΟΙΤΗΤΙΚΟ 6: W για διαγραφή. 381 00:18:10,670 --> 00:18:12,840 >> JASON Hirschhorn: Και w, αν θέλετε να γράψετε σε ένα αρχείο. 382 00:18:12,840 --> 00:18:17,570 Έτσι, σε αυτή την περίπτωση, γράφουμε στο αρχείο, έτσι έχουμε w. 383 00:18:17,570 --> 00:18:22,360 Μπορείτε να το ανοίξετε, θα πρέπει επίσης να αποθηκεύσετε το αρχείο κάπου, και αυτό είναι με το 384 00:18:22,360 --> 00:18:26,000 κωδικός στην αριστερή πλευρά ο φορέας ανάθεσης - 385 00:18:26,000 --> 00:18:31,220 Είμαι δημιουργία ενός δείκτη σε ένα αρχείο ονομάζεται, στην περίπτωση αυτή, το αρχείο. 386 00:18:31,220 --> 00:18:36,070 >> Εμείς δεν πρόκειται να ανησυχείτε τι αυτό όλα τα καπάκια ΑΡΧΕΙΟ πράγμα είναι. 387 00:18:36,070 --> 00:18:40,600 Αρκεί να πούμε, είναι μια μακρά ρεύμα μηδενικά και μονάδες. 388 00:18:40,600 --> 00:18:44,970 Και αυτό είναι το πώς πρόκειται να λειτουργούν και να κατανοήσει αυτό. 389 00:18:44,970 --> 00:18:47,300 >> Το επόμενο πράγμα που πρέπει να κάνουμε - και αυτό είναι εξαιρετικά σημαντικό - 390 00:18:47,300 --> 00:18:49,070 κάθε φορά που ανοίγετε ένα αρχείο - 391 00:18:49,070 --> 00:18:54,250 Στην πραγματικότητα, κάθε φορά που θα καλέσετε malloc, για παράδειγμα, και να πάρετε κάποια μνήμης και δοκιμάστε 392 00:18:54,250 --> 00:18:57,980 και να το αποθηκεύσετε σε ένα δείκτη, μπορείτε πάντα θέλετε να ελέγξετε για να βεβαιωθείτε ότι 393 00:18:57,980 --> 00:19:00,230 συνάρτηση δεν επιστρέφει null. 394 00:19:00,230 --> 00:19:05,230 >> Έτσι, σε αυτή την περίπτωση, έχουμε τον έλεγχο για να σίγουροι ότι μπορούμε πραγματικά να ανοίξει το 395 00:19:05,230 --> 00:19:10,230 αρχείο σωστά και δεν υπήρχε κανένα λάθος στο πρόγραμμά μας. 396 00:19:10,230 --> 00:19:15,160 Στη συνέχεια, τη στιγμή που έχουμε ελέγχονται για να βεβαιωθείτε ότι έχουμε ένα αρχείο εργασίας, μπορούμε 397 00:19:15,160 --> 00:19:18,520 γράψτε, ή να διαβάσει από, ή επισυνάπτει στον φάκελο. 398 00:19:18,520 --> 00:19:24,270 Σε αυτή την περίπτωση, είμαι απλά εκτύπωση μια γραμμή σε αυτό το αρχείο. 399 00:19:24,270 --> 00:19:25,450 >> Πώς μπορώ να ξέρω αυτό; 400 00:19:25,450 --> 00:19:27,990 Λοιπόν, είμαι με τη χρήση αυτής της λειτουργίας ονομάζεται fprintf. 401 00:19:27,990 --> 00:19:30,970 Όλες οι λειτουργίες που θα χρησιμοποιήσετε κατά τη σύνταξη, ή την ανάγνωση από ή 402 00:19:30,970 --> 00:19:34,950 χειρισμό αρχείων θα είναι παρόμοιο με λειτουργίες που έχετε δει πριν, αλλά 403 00:19:34,950 --> 00:19:38,420 ξεκινούν με το γράμμα F, στέκεται για το αρχείο. 404 00:19:38,420 --> 00:19:43,440 Και fprintf, σε αντίθεση με την κανονική μας εκτύπωση app, παίρνει ένα επιπλέον επιχείρημα, 405 00:19:43,440 --> 00:19:47,800 και αυτό είναι το αρχείο όπου μπορείτε θέλετε να εκτυπώσετε αυτή τη γραμμή. 406 00:19:47,800 --> 00:19:50,640 >> Δεν έχω τίποτα να το δικαίωμα των Ohai. 407 00:19:50,640 --> 00:19:52,860 Δεν έχω την τρίτη επιχείρημα για την printf - 408 00:19:52,860 --> 00:19:57,030 ή το δεύτερο επιχείρημα για την printf, η Το τρίτο επιχείρημα για την fprintf, γιατί 409 00:19:57,030 --> 00:19:59,480 δεν έχουν καμία κράτησης θέσης εδώ. 410 00:19:59,480 --> 00:20:01,070 Δεν είμαι συμπεριλαμβανομένων τυχόν μεταβλητές. 411 00:20:01,070 --> 00:20:06,070 Αλλά και πάλι, fprintf και όλα αυτά αρχείου λειτουργίες που λειτουργούν με αρχεία 412 00:20:06,070 --> 00:20:09,820 γενικά θα πρέπει το αρχείο κατά την οποία από όπου και αν δραστηριοποιούνται. 413 00:20:09,820 --> 00:20:15,960 >> Τέλος, το τελευταίο σημαντικό πράγμα που πρέπει να κάνετε είναι να κλείσετε το αρχείο, όπως ακριβώς 414 00:20:15,960 --> 00:20:19,530 με - κάθε φορά που malloc κάτι, θέλουμε να ελευθερώσουμε κάτι, για να μην έχουμε 415 00:20:19,530 --> 00:20:22,730 έχετε μια διαρροή μνήμης - θέλουμε να κλείσει το αρχείο μας. 416 00:20:22,730 --> 00:20:28,180 Εάν αυτό το πρόγραμμα τερματίστηκε χωρίς κλείσιμο το αρχείο, οι πιθανότητες είναι τίποτα δεν θα πάει 417 00:20:28,180 --> 00:20:30,050 λάθος, ειδικά αν ήταν ένα μικρό αρχείο. 418 00:20:30,050 --> 00:20:35,020 >> Αλλά αυτό είναι σίγουρα καλό στυλ κωδικοποίησης και την πρακτική να κλείσει πάντα το αρχείο σας 419 00:20:35,020 --> 00:20:38,050 όταν τελειώσετε τη χρήση του. 420 00:20:38,050 --> 00:20:43,630 Έτσι ώστε να είναι τα βασικά στοιχεία του αρχείου I / O. Πιθανόν να έχετε δει ότι πριν, ή 421 00:20:43,630 --> 00:20:45,710 παρακολούθησαν το εν λόγω φανταστική μικρή. 422 00:20:45,710 --> 00:20:48,410 Μήπως κάποιος έχει οποιεσδήποτε ερωτήσεις, πριν πάμε σε κάποια κωδικοποίηση πρακτική 423 00:20:48,410 --> 00:20:51,800 προβλήματα, για το αρχείο I / O ή βήματα Πήγα πάνω; 424 00:20:51,800 --> 00:21:00,198 425 00:21:00,198 --> 00:21:03,162 >> [TYPING SOUNDS] 426 00:21:03,162 --> 00:21:04,150 >> JASON Hirschhorn: Σας Έχω μια ερώτηση, AVI; 427 00:21:04,150 --> 00:21:04,660 >> AVI: Όχι. 428 00:21:04,660 --> 00:21:04,740 >> JASON Hirschhorn: OK. 429 00:21:04,740 --> 00:21:06,746 Πάω να περιμένουν άλλο επτά δευτερόλεπτα. 430 00:21:06,746 --> 00:21:07,590 [Γελάει] 431 00:21:07,590 --> 00:21:08,620 Αυτή είναι μια πολύ καλή συμβουλή. 432 00:21:08,620 --> 00:21:10,750 Εσείς απλά δεν μου αρέσει ερωτήσεις. 433 00:21:10,750 --> 00:21:11,660 Αυτό είναι μια χαρά. 434 00:21:11,660 --> 00:21:12,330 OK. 435 00:21:12,330 --> 00:21:17,620 Έτσι, το πρόβλημά μας είναι πρώτη προπόνηση, είμαστε πρόκειται να επαναλάβει τη λειτουργία της 436 00:21:17,620 --> 00:21:22,330 ένα εργαλείο γραμμής εντολών που ίσως χρησιμοποιείται πριν - αντίγραφο - 437 00:21:22,330 --> 00:21:23,500 το εργαλείο αντιγραφής. 438 00:21:23,500 --> 00:21:28,050 Εάν πληκτρολογήσετε cp και στη συνέχεια να περάσει το δύο επιχειρήματα σε τερματικό σας, μπορείτε να 439 00:21:28,050 --> 00:21:28,980 αντιγράψετε ένα αρχείο. 440 00:21:28,980 --> 00:21:31,220 Και αυτό είναι αυτό που πρόκειται να γράψω τώρα. 441 00:21:31,220 --> 00:21:35,830 >> Έτσι και πάλι, διαβάζοντας μακριά από αυτή τη διαφάνεια, είχα μπορείτε να γράψετε ένα πρόγραμμα που θα λαμβάνει 442 00:21:35,830 --> 00:21:38,130 δύο και μόνο δύο γραμμής εντολών επιχειρήματα - 443 00:21:38,130 --> 00:21:40,750 ένα αρχείο προέλευσης και ένα αρχείο προορισμού - 444 00:21:40,750 --> 00:21:44,590 και αντιγράφει τα περιεχόμενα της πηγής αρχείο στο αρχείο προορισμού 445 00:21:44,590 --> 00:21:46,960 ένα byte σε μια στιγμή. 446 00:21:46,960 --> 00:21:48,510 Έτσι ώστε να είναι πολλά για να ζητήσει. 447 00:21:48,510 --> 00:21:52,200 >> Και πάλι, μια καλή προσέγγιση σε αυτό είναι να δεν πάει κατ 'ευθείαν στον κώδικα C, αλλά 448 00:21:52,200 --> 00:21:54,280 σπάσει σε μερικά βήματα. 449 00:21:54,280 --> 00:21:58,400 Κατ 'αρχάς, σκεφτείτε για τη λογική - ακριβώς αυτό σας ζητώ να κάνετε - 450 00:21:58,400 --> 00:22:00,620 και να κατανοήσουν όλα τα βήματα σε αυτό το πρόβλημα. 451 00:22:00,620 --> 00:22:04,410 Όχι σε C, μόνο σε κάποια ψευδοκώδικα, ή ακόμα και ένα νοητικό μοντέλο της 452 00:22:04,410 --> 00:22:06,030 τι συμβαίνει. 453 00:22:06,030 --> 00:22:10,050 >> Στη συνέχεια, αφού έχετε το ψευδοκώδικα τα κάτω, καταλάβω πώς ο ψευδοκώδικας 454 00:22:10,050 --> 00:22:14,600 χάρτες σε εργαλεία και πράγματα έχουμε έμαθαν να χρησιμοποιούν σε C. 455 00:22:14,600 --> 00:22:19,070 >> Και τέλος, αφού έχετε όλα μαζί, τότε μπορείτε να προγραμματίσετε το πρόβλημα. 456 00:22:19,070 --> 00:22:23,370 Διαρκέσει 5 έως 10 λεπτά για να εργάζονται σε αυτό το πρόβλημα. 457 00:22:23,370 --> 00:22:25,800 Θα βάλω τις οδηγίες πίσω επάνω σε ένα δευτερόλεπτο. 458 00:22:25,800 --> 00:22:27,990 Και μετά θα πάμε να πάει πέρα ​​από η ψευδοκώδικα, και τον κωδικό 459 00:22:27,990 --> 00:22:29,230 να ζήσουν σαν ομάδα. 460 00:22:29,230 --> 00:22:31,640 >> Εάν έχετε οποιεσδήποτε ερωτήσεις, ενώ είστε εργάζονται σε αυτό, μη διστάσετε να αυξήσει 461 00:22:31,640 --> 00:22:34,260 το χέρι σας, και θα έρθω γύρω και να τους απαντήσει. 462 00:22:34,260 --> 00:22:37,020 463 00:22:37,020 --> 00:22:39,330 >> ΦΟΙΤΗΤΗΣ 7: Μπορώ να περάστε ένα κομμάτι χαρτί; 464 00:22:39,330 --> 00:22:41,537 >> JASON Hirschhorn: Τι συμβαίνει; 465 00:22:41,537 --> 00:26:46,047 466 00:26:46,047 --> 00:26:48,043 >> [TYPING SOUNDS] 467 00:26:48,043 --> 00:26:48,730 >> JASON Hirschhorn: OK. 468 00:26:48,730 --> 00:26:51,710 Ας πάει πάνω από τον ψευδοκώδικα πρώτα, και Στη συνέχεια θα σας δώσω ένα ζευγάρι περισσότερο 469 00:26:51,710 --> 00:26:52,960 λεπτά για να τελειώσει κωδικοποίησης. 470 00:26:52,960 --> 00:26:55,540 471 00:26:55,540 --> 00:26:58,650 >> Ποιος θα ήθελε να μου να ξεκινήσω με την πρώτη γραμμή του 472 00:26:58,650 --> 00:27:00,030 pseudocode για αυτή τη λειτουργία; 473 00:27:00,030 --> 00:27:03,330 474 00:27:03,330 --> 00:27:05,740 >> ΦΟΙΤΗΤΗΣ 8: Ελέγξτε για να βεβαιωθείτε ότι Σας δόθηκαν δύο αρχεία. 475 00:27:05,740 --> 00:27:06,990 >> JASON Hirschhorn: OK. 476 00:27:06,990 --> 00:27:21,270 477 00:27:21,270 --> 00:27:22,990 Και αν δεν είμαστε; 478 00:27:22,990 --> 00:27:25,974 >> ΦΟΙΤΗΤΗΣ 8: Θα ήθελα να επιστρέψω 0. 479 00:27:25,974 --> 00:27:27,872 >> JASON Hirschhorn: Πρέπει να επιστρέψουμε 0; 480 00:27:27,872 --> 00:27:30,182 >> ΦΟΙΤΗΤΗΣ 8: Επιστροφή α - 481 00:27:30,182 --> 00:27:30,650 κοπή. 482 00:27:30,650 --> 00:27:30,850 Λυπάμαι. 483 00:27:30,850 --> 00:27:31,210 >> JASON Hirschhorn: Ναι. 484 00:27:31,210 --> 00:27:32,710 Μάλλον όχι 0. 485 00:27:32,710 --> 00:27:34,680 Επειδή το 0 σημαίνει ότι όλα ήταν καλά. 486 00:27:34,680 --> 00:27:35,030 OK. 487 00:27:35,030 --> 00:27:36,730 Έτσι, αυτή είναι η πρώτη γραμμή του ψευδοκώδικα. 488 00:27:36,730 --> 00:27:38,715 Ποιος έχει τη δεύτερη γραμμή ψευδοκώδικα; 489 00:27:38,715 --> 00:27:40,630 >> ΦΟΙΤΗΤΗΣ 9: Ανοικτή τόσο τα αρχεία; 490 00:27:40,630 --> 00:27:41,880 >> JASON Hirschhorn: Ανοίξτε τα δύο αρχεία. 491 00:27:41,880 --> 00:27:49,970 492 00:27:49,970 --> 00:27:50,920 Εντάξει; 493 00:27:50,920 --> 00:27:52,850 >> ΦΟΙΤΗΤΗΣ 10: Ελέγξτε για να δείτε αν το αρχείο είναι NULL; 494 00:27:52,850 --> 00:28:10,906 495 00:28:10,906 --> 00:28:12,580 >> JASON Hirschhorn: Ελέγξτε για να βεβαιωθείτε βέβαιος ότι ούτε είναι NULL. 496 00:28:12,580 --> 00:28:15,800 Ως μέρος - 497 00:28:15,800 --> 00:28:17,540 slash 0 - 498 00:28:17,540 --> 00:28:18,887 είναι ότι NULL; 499 00:28:18,887 --> 00:28:20,080 >> ΦΟΙΤΗΤΗΣ 11: Όχι. 500 00:28:20,080 --> 00:28:21,190 >> JASON Hirschhorn: Αυτό δεν είναι NULL. 501 00:28:21,190 --> 00:28:23,400 Αυτό ονομάζεται τερματισμού NULL. 502 00:28:23,400 --> 00:28:25,580 Είναι πραγματικά γράφεται με ένα μόνο λίτρο. 503 00:28:25,580 --> 00:28:28,580 Έτσι, ελέγχοντας κάτι ενάντια σε αυτό - Αυτό είναι στην πραγματικότητα ένας χαρακτήρας - 504 00:28:28,580 --> 00:28:31,710 έτσι τον έλεγχο κάτι ενάντια σε αυτό είναι δεν είναι το ίδιο με τον έλεγχο για να δούμε αν 505 00:28:31,710 --> 00:28:32,690 ισούται με NULL. 506 00:28:32,690 --> 00:28:34,100 >> Και μερικοί άνθρωποι - 507 00:28:34,100 --> 00:28:36,040 για κουίζ τους και το πρόβλημά τους σύνολα - έχουμε το 508 00:28:36,040 --> 00:28:36,890 δύο από αυτά συγχέονται. 509 00:28:36,890 --> 00:28:38,830 Αλλά τα δύο από αυτά είναι στην πραγματικότητα διαφορετικές. 510 00:28:38,830 --> 00:28:40,220 Ένας τελειώνει μια σειρά - 511 00:28:40,220 --> 00:28:43,210 το ένα είναι ένας δείκτης για 0. 512 00:28:43,210 --> 00:28:46,490 >> ΦΟΙΤΗΤΗΣ 12: Γιατί δεν θα ελέγξει για βεβαιωθείτε ότι τα αρχεία δεν είναι NULL 513 00:28:46,490 --> 00:28:48,670 πριν να τα ανοίξετε; 514 00:28:48,670 --> 00:28:54,772 >> JASON Hirschhorn: Λοιπόν, ανοίξτε το αποθηκεύει κάτι σε αυτό το αρχείο. 515 00:28:54,772 --> 00:28:57,780 Και αν πάτε πίσω εδώ - 516 00:28:57,780 --> 00:28:59,520 έτσι ώστε αυτή η γραμμή - fopen - 517 00:28:59,520 --> 00:29:05,300 θα σας δώσει μια διεύθυνση και να αποθηκεύουν ότι η διεύθυνση στο αρχείο αν αυτό δουλεύει. 518 00:29:05,300 --> 00:29:07,650 Αν δεν λειτουργεί, θα αποθηκεύσει NULL - 519 00:29:07,650 --> 00:29:08,020 >> ΦΟΙΤΗΤΗΣ 12: Αχ. 520 00:29:08,020 --> 00:29:08,180 OK. 521 00:29:08,180 --> 00:29:08,500 Σε έπιασα. 522 00:29:08,500 --> 00:29:09,050 >> JASON Hirschhorn: Στο αρχείο. 523 00:29:09,050 --> 00:29:11,990 Έτσι δεν μπορείτε να ελέγξετε για NULL πριν τους έχετε ανοίξει. 524 00:29:11,990 --> 00:29:13,520 NULL σημαίνει κάτι που δεν έκανε λειτουργούν σωστά. 525 00:29:13,520 --> 00:29:18,030 526 00:29:18,030 --> 00:29:18,740 OK. 527 00:29:18,740 --> 00:29:22,590 Έτσι, βεβαιωθείτε ότι δεν είναι; 528 00:29:22,590 --> 00:29:23,200 Ή είναι; 529 00:29:23,200 --> 00:29:23,770 Τι νομίζετε; 530 00:29:23,770 --> 00:29:24,310 Θα πάμε με αυτό. 531 00:29:24,310 --> 00:29:24,520 >> ΦΟΙΤΗΤΗΣ 13: Είναι. 532 00:29:24,520 --> 00:29:25,020 >> JASON Hirschhorn: Είναι; 533 00:29:25,020 --> 00:29:25,930 Ούτε είναι; 534 00:29:25,930 --> 00:29:26,350 >> ΦΟΙΤΗΤΗΣ 13: Είναι. 535 00:29:26,350 --> 00:29:26,390 >> JASON Hirschhorn: OK. 536 00:29:26,390 --> 00:29:28,510 Εμείς φαίνεται να έχουν κάποια συναίνεση σε αυτό. 537 00:29:28,510 --> 00:29:30,520 Ούτε είναι NULL. 538 00:29:30,520 --> 00:29:32,250 Εντάξει, την επόμενη γραμμή του ψευδοκώδικα. 539 00:29:32,250 --> 00:29:33,600 Ποιος δεν μου έδωσε μια γραμμή ακόμα; 540 00:29:33,600 --> 00:29:37,350 541 00:29:37,350 --> 00:29:38,295 Εμείς θα σας περιμένουμε. 542 00:29:38,295 --> 00:29:39,020 Ναι. 543 00:29:39,020 --> 00:29:40,895 >> ΦΟΙΤΗΤΗΣ 14: Θα πρέπει να διαβάσετε από το πρώτο αρχείο; 544 00:29:40,895 --> 00:29:42,290 >> JASON Hirschhorn: OK. 545 00:29:42,290 --> 00:29:46,240 >> ΦΟΙΤΗΤΗΣ 14: Ή χρησιμοποιούμε fscanf ή κάτι τέτοιο το πρώτο αρχείο; 546 00:29:46,240 --> 00:29:50,650 >> JASON Hirschhorn: Έτσι θέλουμε να διαβάζεται από το πρώτο αρχείο και - 547 00:29:50,650 --> 00:29:51,900 ας βάλουμε αυτό το δικαίωμα εδώ. 548 00:29:51,900 --> 00:30:00,600 549 00:30:00,600 --> 00:30:01,880 Διαβάστε από το αρχείο προέλευσης. 550 00:30:01,880 --> 00:30:05,370 Και τότε, τι κάνουμε μετά εμείς διαβάζεται από το αρχείο προέλευσης; 551 00:30:05,370 --> 00:30:06,620 Κάποιος άλλος; 552 00:30:06,620 --> 00:30:09,150 553 00:30:09,150 --> 00:30:12,190 >> ΦΟΙΤΗΤΗΣ 15: Γράψε στο το αρχείο προορισμού; 554 00:30:12,190 --> 00:30:22,080 555 00:30:22,080 --> 00:30:25,620 >> JASON Hirschhorn: Σας γράφω για να το αρχείο προορισμού, και - 556 00:30:25,620 --> 00:30:26,210 OK. 557 00:30:26,210 --> 00:30:30,030 Τι άλλο χάνουμε; 558 00:30:30,030 --> 00:30:32,460 Κάποιος άλλος που δεν μου έδωσε μια γραμμή κώδικα ακόμα - του ψευδοκώδικα. 559 00:30:32,460 --> 00:30:33,510 Ναι. 560 00:30:33,510 --> 00:30:36,540 >> ΦΟΙΤΗΤΗΣ 16: Ίσως μπορείτε να ελέγχετε πάντα αν υπάρχει κάτι για να διαβάσετε για, 561 00:30:36,540 --> 00:30:37,970 όπως και η επόμενη γραμμή; 562 00:30:37,970 --> 00:30:39,550 Που είναι σαν την επόμενη γραμμή, δείτε εάν υπάρχει. 563 00:30:39,550 --> 00:30:40,660 >> [ΗΛΕΚΤΡΟΝΙΚΗ BEEP] 564 00:30:40,660 --> 00:30:41,095 >> JASON Hirschhorn: Ωχ. 565 00:30:41,095 --> 00:30:43,120 Αυτό είναι το λογισμικό journaling μου. 566 00:30:43,120 --> 00:30:43,580 Ναι; 567 00:30:43,580 --> 00:30:44,960 >> ΦΟΙΤΗΤΗΣ 16: Ναι. 568 00:30:44,960 --> 00:30:48,940 >> JASON Hirschhorn: Έτσι δώστε σε μένα ακόμα μια φορά. 569 00:30:48,940 --> 00:30:51,640 >> ΦΟΙΤΗΤΗΣ 16: Ελέγξτε αν υπάρχει ακόμα μια επόμενη γραμμή από το 570 00:30:51,640 --> 00:30:52,920 αρχείο προέλευσης για να διαβάσετε. 571 00:30:52,920 --> 00:30:53,500 >> JASON Hirschhorn: OK. 572 00:30:53,500 --> 00:30:56,060 Γι 'αυτό και δεν διαβάζετε τις γραμμές - διάβαζαν bytes εδώ - 573 00:30:56,060 --> 00:30:57,590 αλλά είσαι σωστή. 574 00:30:57,590 --> 00:31:00,040 Θέλουμε να διαβάσει και να γράψει μέχρι δεν υπάρχουν περισσότερα byte. 575 00:31:00,040 --> 00:31:11,430 576 00:31:11,430 --> 00:31:11,735 OK. 577 00:31:11,735 --> 00:31:16,940 Και έτσι αυτά θα πρέπει πραγματικά να είναι σε εσοχή ένα κομμάτι, επειδή είναι εκεί κάτω. 578 00:31:16,940 --> 00:31:17,470 Σωστά; 579 00:31:17,470 --> 00:31:20,620 Μέχρι είμαστε έξω από bytes, θα πάμε να διαβάζεται από το αρχείο προέλευσης και να γράφουν 580 00:31:20,620 --> 00:31:22,160 στο αρχείο προορισμού. 581 00:31:22,160 --> 00:31:24,510 >> Και τότε, τι είναι η τελευταία γραμμή ψευδοκώδικα; 582 00:31:24,510 --> 00:31:26,380 Κάποιος που δεν είναι δεδομένη μου κάτι ακόμα. 583 00:31:26,380 --> 00:31:29,270 584 00:31:29,270 --> 00:31:30,260 >> ΦΟΙΤΗΤΗΣ 17: Κλείστε τα αρχεία; 585 00:31:30,260 --> 00:31:31,510 >> JASON Hirschhorn: Ακριβώς. 586 00:31:31,510 --> 00:31:36,370 587 00:31:36,370 --> 00:31:37,450 Κλείστε τα αρχεία. 588 00:31:37,450 --> 00:31:38,400 Έτσι, υπάρχει ψευδοκώδικα μας. 589 00:31:38,400 --> 00:31:41,870 Πάω να θέσει το ψευδοκώδικα σε gedit, και σε λίγα λεπτά θα 590 00:31:41,870 --> 00:31:44,626 θα κωδικοποιήσει αυτό μαζί. 591 00:31:44,626 --> 00:33:55,280 592 00:33:55,280 --> 00:33:56,000 >> OK. 593 00:33:56,000 --> 00:33:58,290 Ας ξεκινήσουμε ως ομάδα. 594 00:33:58,290 --> 00:33:59,940 Nishant, έχω νέο αρχείο μου. 595 00:33:59,940 --> 00:34:01,130 Έχω μόλις άνοιξε αυτό επάνω. 596 00:34:01,130 --> 00:34:01,880 Untitled document 1. 597 00:34:01,880 --> 00:34:05,490 Ποιο είναι το πρώτο πράγμα που πρέπει να κάνω; 598 00:34:05,490 --> 00:34:07,040 >> Nishant: Συμπεριλάβετε βιβλιοθήκες; 599 00:34:07,040 --> 00:34:08,219 >> JASON Hirschhorn: OK. 600 00:34:08,219 --> 00:34:11,070 Με ποιες βιβλιοθήκες; 601 00:34:11,070 --> 00:34:17,570 >> Nishant: stdio.h, stdlib.h, πιστεύω; 602 00:34:17,570 --> 00:34:18,000 >> JASON Hirschhorn: OK. 603 00:34:18,000 --> 00:34:21,592 Τι είναι stdlib για; 604 00:34:21,592 --> 00:34:23,010 >> Nishant: ξέχασα. 605 00:34:23,010 --> 00:34:23,219 >> JASON Hirschhorn: OK. 606 00:34:23,219 --> 00:34:24,179 Έτσι περιλαμβάνουν stdio. 607 00:34:24,179 --> 00:34:28,630 Τι πρέπει να κάνω ακόμη και πριν Αρχίζω κωδικοποίηση; 608 00:34:28,630 --> 00:34:29,710 >> Nishant: Γράψτε μια επικεφαλίδα; 609 00:34:29,710 --> 00:34:31,830 >> JASON Hirschhorn: Πώς μπορώ να το χρωματιστό; 610 00:34:31,830 --> 00:34:34,060 >> [Παρεμβάλλοντας VOICES] 611 00:34:34,060 --> 00:34:35,040 >> Nishant: Πώς μπορείτε να πάρετε χρώματος; 612 00:34:35,040 --> 00:34:38,060 >> JASON Hirschhorn: Πώς μπορώ χρώμα κωδικοποίησης; 613 00:34:38,060 --> 00:34:38,570 >> Nishant: Δεν ξέρω. 614 00:34:38,570 --> 00:34:38,830 Αχ. 615 00:34:38,830 --> 00:34:39,389 Αποθήκευση. 616 00:34:39,389 --> 00:34:39,929 >> JASON Hirschhorn: Save. 617 00:34:39,929 --> 00:34:40,270 Ναι. 618 00:34:40,270 --> 00:34:41,760 Θα πρέπει να το αποθηκεύσετε ως. Αι. 619 00:34:41,760 --> 00:34:46,239 Έτσι το αποθηκεύσετε στην επιφάνεια εργασίας ως cp.c. 620 00:34:46,239 --> 00:34:47,280 Sweet. 621 00:34:47,280 --> 00:34:51,199 Και αν θέλετε να πάρετε την πλήρη στυλ σημεία, τι πρέπει να κάνω 622 00:34:51,199 --> 00:34:53,085 περιλαμβάνουν στην κορυφή; 623 00:34:53,085 --> 00:34:58,390 >> Nishant: Θα μπορούσατε να γράψετε το όνομά σας, το όνομα του προγράμματος, και το σκοπό 624 00:34:58,390 --> 00:34:59,640 του προγράμματος, καθώς και? 625 00:34:59,640 --> 00:35:08,400 626 00:35:08,400 --> 00:35:10,040 >> JASON Hirschhorn: Φαίνεται καλό. 627 00:35:10,040 --> 00:35:10,470 Εξαιρετικό. 628 00:35:10,470 --> 00:35:12,940 Έτσι, μας έχετε ξεκίνησε τέλεια. 629 00:35:12,940 --> 00:35:13,720 # Include - 630 00:35:13,720 --> 00:35:15,365 επίσης θα γράψει - 631 00:35:15,365 --> 00:35:30,050 632 00:35:30,050 --> 00:35:30,870 OK. 633 00:35:30,870 --> 00:35:33,520 Έτσι, νομίζω ότι είμαι έτοιμοι να πάτε. 634 00:35:33,520 --> 00:35:38,003 Ποιος έχει την πρώτη γραμμή του κώδικα για μένα - ή οι πρώτες γραμμές κώδικα που 635 00:35:38,003 --> 00:35:41,280 θα πάρει για να ικανοποιήσει το πρώτο μας σχόλιο σε ψευδοκώδικα; 636 00:35:41,280 --> 00:35:41,985 Μπορείτε. 637 00:35:41,985 --> 00:35:48,780 >> ΦΟΙΤΗΤΗΣ 18: Δεν πρέπει να είναι int argc, και στη συνέχεια char * argv; 638 00:35:48,780 --> 00:35:49,490 >> JASON Hirschhorn: Νομίζω ότι έχεις δίκιο. 639 00:35:49,490 --> 00:35:56,270 Ας αλλάξουμε να int main, ανοιχτή paren, int argc, κόμμα, char * argv; 640 00:35:56,270 --> 00:35:57,150 Όπως αυτό; 641 00:35:57,150 --> 00:35:57,410 >> ΦΟΙΤΗΤΗΣ 18: Βάσεις. 642 00:35:57,410 --> 00:35:58,260 >> JASON Hirschhorn: Στηρίγματα. 643 00:35:58,260 --> 00:35:59,860 Άνοιγμα βραχίονα, κλείσιμο παρένθεσης, κοντά γονέα. 644 00:35:59,860 --> 00:36:00,240 Τέλεια. 645 00:36:00,240 --> 00:36:02,160 Τώρα μπορώ να πάρω τα επιχειρήματα της γραμμής εντολών. 646 00:36:02,160 --> 00:36:02,430 OK. 647 00:36:02,430 --> 00:36:04,250 Βεβαιωθείτε ότι είμαστε στη διάθεσή τους δύο αρχεία. 648 00:36:04,250 --> 00:36:07,905 Μπορείτε να μου δώσετε και αυτό. 649 00:36:07,905 --> 00:36:09,180 >> ΦΟΙΤΗΤΗΣ 18: Αν argc - 650 00:36:09,180 --> 00:36:11,060 αυτό δεν είναι ίσο με 3. 651 00:36:11,060 --> 00:36:14,360 >> JASON Hirschhorn: Αν ανοιχτά paren argc δεν ισότιμη 3; 652 00:36:14,360 --> 00:36:16,970 >> ΦΟΙΤΗΤΗΣ 18: Ναι, μπορείτε να επιστρέψετε 1 ή οτιδήποτε. 653 00:36:16,970 --> 00:36:17,460 >> JASON Hirschhorn: Συγγνώμη. 654 00:36:17,460 --> 00:36:19,120 >> ΦΟΙΤΗΤΗΣ 18: Επιστροφή 1 ή οτιδήποτε. 655 00:36:19,120 --> 00:36:20,270 >> JASON Hirschhorn: Επιστροφή 1. 656 00:36:20,270 --> 00:36:22,230 Εντάξει; 657 00:36:22,230 --> 00:36:22,970 Μεγάλη. 658 00:36:22,970 --> 00:36:24,290 Ανοίξτε τα δύο αρχεία. 659 00:36:24,290 --> 00:36:26,160 Ποιος μπορεί να με βοηθήσει να ανοίξετε τα δύο αρχεία; 660 00:36:26,160 --> 00:36:28,125 Ποιος δεν μου έδωσε τον κωδικό ακόμα; 661 00:36:28,125 --> 00:36:31,510 662 00:36:31,510 --> 00:36:32,320 Kurt; 663 00:36:32,320 --> 00:36:36,145 >> KURT: Έτσι, όλα τα καπάκια Ρ-Ι-Ε-Ε πηγή αστέρων. 664 00:36:36,145 --> 00:36:39,390 665 00:36:39,390 --> 00:36:40,920 >> JASON Hirschhorn: Πάω να πάρουν τα φωνήεντα. 666 00:36:40,920 --> 00:36:41,570 Αυτοί είναι δροσερά. 667 00:36:41,570 --> 00:36:42,716 Είναι σαν Tumblr. 668 00:36:42,716 --> 00:36:44,610 >> ΦΟΙΤΗΤΗΣ 18: Ισούται fopen - 669 00:36:44,610 --> 00:36:46,612 >> JASON Hirschhorn: Ισούται fopen; 670 00:36:46,612 --> 00:36:49,870 >> ΦΟΙΤΗΤΗΣ 18: Open paren, argv, ανοιχτό βραχίονα. 671 00:36:49,870 --> 00:36:50,055 >> JASON Hirschhorn: Περιμένετε. 672 00:36:50,055 --> 00:36:50,240 Λυπάμαι. 673 00:36:50,240 --> 00:36:51,050 Ανοίξτε paren. 674 00:36:51,050 --> 00:36:51,456 OK. 675 00:36:51,456 --> 00:36:53,080 >> ΦΟΙΤΗΤΗΣ 18: Ναι. 676 00:36:53,080 --> 00:36:55,110 Argv sub 1. 677 00:36:55,110 --> 00:36:55,860 >> JASON Hirschhorn: Sub 1; 678 00:36:55,860 --> 00:36:56,140 >> ΦΟΙΤΗΤΗΣ 18: Ναι. 679 00:36:56,140 --> 00:36:58,540 Argv ανοικτό στήριγμα 1 - 680 00:36:58,540 --> 00:36:59,730 Ναι. 681 00:36:59,730 --> 00:37:06,470 Και τότε το κόμμα, και στη συνέχεια ανοίξτε το διπλό απόσπασμα, r, διπλά εισαγωγικά, 682 00:37:06,470 --> 00:37:08,250 κοντά paren, ερωτηματικό. 683 00:37:08,250 --> 00:37:09,450 >> JASON Hirschhorn: Sweet. 684 00:37:09,450 --> 00:37:10,950 Και τι γίνεται με το άλλο; 685 00:37:10,950 --> 00:37:16,030 >> ΦΟΙΤΗΤΗΣ 18: Πολύ παρόμοια, αλλά, αντίθετα, S-R-C, που θα το ονομάσουμε D-S-T. 686 00:37:16,030 --> 00:37:17,060 >> JASON Hirschhorn: Oo! 687 00:37:17,060 --> 00:37:17,772 Μου αρέσει αυτό. 688 00:37:17,772 --> 00:37:20,010 >> ΦΟΙΤΗΤΗΣ 18: Just D-S-T. Ναι. 689 00:37:20,010 --> 00:37:23,057 Και στη συνέχεια, argv, ανοιχτό βραχίονα, 2. 690 00:37:23,057 --> 00:37:23,200 Ναι. 691 00:37:23,200 --> 00:37:26,720 Και τότε w αντί του r. 692 00:37:26,720 --> 00:37:27,620 Ναι. 693 00:37:27,620 --> 00:37:29,630 >> JASON Hirschhorn: Μεγάλη. 694 00:37:29,630 --> 00:37:31,360 Επόμενο ζευγάρι των γραμμών. 695 00:37:31,360 --> 00:37:34,040 Επίσης, αν κάποιος έχει τα πράγματα για να προσθέσετε γραμμές που έχουμε κάνει, μη διστάσετε να 696 00:37:34,040 --> 00:37:35,690 προσθέστε αυτά επίσης. 697 00:37:35,690 --> 00:37:37,520 Ελέγξτε για να βεβαιωθείτε ότι δεν είναι NULL. 698 00:37:37,520 --> 00:37:41,450 Ποιος μπορεί να μου δώσει τον κώδικα που πρέπει να ικανοποιήσει αυτή την γραμμή ψευδοκώδικα; 699 00:37:41,450 --> 00:37:44,430 700 00:37:44,430 --> 00:37:45,870 Archer. 701 00:37:45,870 --> 00:37:58,645 >> ΤΟΞΟΤΗΣ: Αν src ισούται ισούται NULL ή dst ισούται ισούται 702 00:37:58,645 --> 00:38:04,590 NULL, τότε θα επιστρέψει - 703 00:38:04,590 --> 00:38:07,130 704 00:38:07,130 --> 00:38:07,976 >> JASON Hirschhorn: Τι; 705 00:38:07,976 --> 00:38:08,890 >> ΤΟΞΟΤΗΣ: Επιστροφή 2; 706 00:38:08,890 --> 00:38:09,760 >> JASON Hirschhorn: Επιστροφή 2. 707 00:38:09,760 --> 00:38:14,400 Έτσι, αν είναι ανοιχτό paren src ισούται ισούται με NULL, ή - 708 00:38:14,400 --> 00:38:15,590 ό, τι αυτό thing's - σωλήνα; 709 00:38:15,590 --> 00:38:16,346 Pipe; 710 00:38:16,346 --> 00:38:17,140 Θα το ονομάσουμε σωλήνα. 711 00:38:17,140 --> 00:38:22,340 Σωληνώσεων, σωλήνες, dst ισούται ίσων NULL, επιστρέψτε 2. 712 00:38:22,340 --> 00:38:23,900 Εντάξει; 713 00:38:23,900 --> 00:38:26,060 Μέχρι είμαστε έξω από bytes - 714 00:38:26,060 --> 00:38:29,820 εμείς είδος παραληφθεί πάνω από αυτό το βήμα το τμήμα ψευδοκώδικα να πηγαίνει μέχρι εδώ. 715 00:38:29,820 --> 00:38:31,970 >> Αλλά μέχρι να είμαστε έξω από bytes - τι κάνει αυτό ακούγεται σαν; 716 00:38:31,970 --> 00:38:34,680 Τι είδους δομή C - 717 00:38:34,680 --> 00:38:36,160 αλλά εγώ δεν χρησιμοποιούν τη δομή των λέξεων, επειδή θα πάμε να αρχίσετε να χρησιμοποιείτε 718 00:38:36,160 --> 00:38:37,350 ότι σε άλλες περιπτώσεις - 719 00:38:37,350 --> 00:38:39,495 αλλά εργαλείο C ακούγεται αυτό σαν; 720 00:38:39,495 --> 00:38:39,970 >> ΦΟΙΤΗΤΗΣ 19: Ένας βρόχος. 721 00:38:39,970 --> 00:38:40,980 >> JASON Hirschhorn: Ένας βρόχος. 722 00:38:40,980 --> 00:38:43,060 Ακούγεται σαν μια θηλιά. 723 00:38:43,060 --> 00:38:49,670 Έτσι, ο οποίος μπορεί να μου δώσει την πρώτη γραμμή του κώδικα βρόχου εδώ; 724 00:38:49,670 --> 00:38:56,320 725 00:38:56,320 --> 00:39:01,980 Μπορείτε επίσης να επιλέξετε τι είδους βρόχο που θέλετε, αν μου δώσεις 726 00:39:01,980 --> 00:39:03,215 αυτή η γραμμή κώδικα. 727 00:39:03,215 --> 00:39:04,150 Υπάρχουν τρία είδη. 728 00:39:04,150 --> 00:39:06,530 Μπορείτε να επιλέξετε. 729 00:39:06,530 --> 00:39:08,080 Θα ήθελα να προτείνω ένα από αυτά. 730 00:39:08,080 --> 00:39:08,410 Avi. 731 00:39:08,410 --> 00:39:09,230 Ποιο από τα δύο θέλετε; 732 00:39:09,230 --> 00:39:09,960 >> AVI: ΓΙΑ. 733 00:39:09,960 --> 00:39:11,460 >> JASON Hirschhorn: ΓΙΑ. 734 00:39:11,460 --> 00:39:15,180 >> AVI: int i ισούται με μηδέν. 735 00:39:15,180 --> 00:39:17,360 >> JASON Hirschhorn: OK. 736 00:39:17,360 --> 00:39:18,570 >> AVI: Αυτό το μέρος δεν είμαι σίγουρος για το. 737 00:39:18,570 --> 00:39:29,080 Αλλά εγώ είναι μικρότερο από το μέγεθος της πηγής αστέρι; 738 00:39:29,080 --> 00:39:31,128 Δεν είμαι σίγουρος γι 'αυτό. 739 00:39:31,128 --> 00:39:32,580 >> JASON Hirschhorn: OK. 740 00:39:32,580 --> 00:39:35,870 >> AVI: Επειδή θέλετε το το μέγεθος του αρχείου, έτσι δεν είναι; 741 00:39:35,870 --> 00:39:41,090 >> JASON Hirschhorn: Έτσι, αυτό πιθανότατα δεν θα μας δίνουν το μέγεθος της πραγματικής 742 00:39:41,090 --> 00:39:43,010 αρχείο σε bytes. 743 00:39:43,010 --> 00:39:47,680 Λοιπόν, τι άλλο θα μπορούσαμε να κάνουμε; 744 00:39:47,680 --> 00:39:48,810 Τι είναι ένα άλλο είδος βρόχου; 745 00:39:48,810 --> 00:39:50,180 Ή θα πρέπει να κολλήσει με το βρόχο ΓΙΑ; 746 00:39:50,180 --> 00:39:55,350 747 00:39:55,350 --> 00:39:57,900 >> ΦΟΙΤΗΤΗΣ 20: Θα μπορούσατε να κάνετε ένα βρόχο ΕΝΩ; 748 00:39:57,900 --> 00:40:01,350 Και τότε, τι θα κάνετε είναι you'd - 749 00:40:01,350 --> 00:40:03,930 γιατί έχουμε ένα char * για το αρχείο. 750 00:40:03,930 --> 00:40:07,950 Έτσι, αν έχουμε κρατήσει μόνο προσαύξηση ότι μέχρι να βρίσκαμε τον χαρακτήρα NULL σε 751 00:40:07,950 --> 00:40:08,500 το τέλος του; 752 00:40:08,500 --> 00:40:11,130 Ή όχι, αυτό δεν είναι το πώς λειτουργούν τα αρχεία; 753 00:40:11,130 --> 00:40:14,300 >> JASON Hirschhorn: Έτσι μπορούμε να κρατήσουμε την αύξηση του char * 754 00:40:14,300 --> 00:40:16,340 μέχρι να βρούμε το NULL - 755 00:40:16,340 --> 00:40:18,580 >> ΦΟΙΤΗΤΗΣ 20: Ουσιαστικά συνεχίζω ανά χαρακτήρα μέχρι να χτυπήσει 756 00:40:18,580 --> 00:40:21,250 το τέλος του αρχείου. 757 00:40:21,250 --> 00:40:21,600 >> JASON Hirschhorn: Ναι. 758 00:40:21,600 --> 00:40:22,560 Έτσι, αυτό είναι που θέλουμε να κάνουμε. 759 00:40:22,560 --> 00:40:24,545 Θέλουμε να κρατήσει ανάγνωση, χαρακτήρα με χαρακτήρα, μέχρι να φτάσουμε στο 760 00:40:24,545 --> 00:40:25,080 το τέλος του αρχείου. 761 00:40:25,080 --> 00:40:25,375 >> ΦΟΙΤΗΤΗΣ 20: Ναι. 762 00:40:25,375 --> 00:40:25,860 Αναζήτηση - 763 00:40:25,860 --> 00:40:28,540 ποιο είναι το τέλος ή σήμα στοπ στο τέλος του ένα αρχείο κειμένου. 764 00:40:28,540 --> 00:40:28,620 >> JASON Hirschhorn: OK. 765 00:40:28,620 --> 00:40:30,140 Έτσι, όταν φτάσουμε στο τέλος του αρχείου - πώς ξέρουμε ότι έχουμε φτάσει 766 00:40:30,140 --> 00:40:33,200 το τέλος ενός αρχείου; 767 00:40:33,200 --> 00:40:34,710 Αν είμαι καλώντας - 768 00:40:34,710 --> 00:40:35,910 οπότε ας κάνουν ένα βήμα πίσω. 769 00:40:35,910 --> 00:40:37,550 Τι είναι συνάρτηση; 770 00:40:37,550 --> 00:40:39,360 Ας πάμε σε αυτή τη γραμμή εδώ. 771 00:40:39,360 --> 00:40:40,630 Διαβάστε από το αρχείο προέλευσης. 772 00:40:40,630 --> 00:40:41,880 Ποιος μπορεί να μου δώσει αυτή τη γραμμή του κώδικα; 773 00:40:41,880 --> 00:40:45,592 774 00:40:45,592 --> 00:40:47,590 >> ΦΟΙΤΗΤΗΣ 21: fscanf; 775 00:40:47,590 --> 00:40:49,110 >> JASON Hirschhorn: fscanf. 776 00:40:49,110 --> 00:40:49,510 OK. 777 00:40:49,510 --> 00:40:52,240 Τι γίνεται αν θέλω να διαβάσω, πολύ Συγκεκριμένα, ένα byte; 778 00:40:52,240 --> 00:40:55,012 779 00:40:55,012 --> 00:40:56,860 >> ΦΟΙΤΗΤΗΣ 21: Δεν ξέρω. 780 00:40:56,860 --> 00:40:57,110 >> JASON Hirschhorn: OK. 781 00:40:57,110 --> 00:40:59,380 Ακόμα πιο απλό από fscanf - τι είναι ένα - 782 00:40:59,380 --> 00:41:01,890 Θέλω να διαβαστεί από ένα αρχείο προέλευσης; 783 00:41:01,890 --> 00:41:03,720 Διαβάστε από ένα αρχείο προέλευσης. 784 00:41:03,720 --> 00:41:04,850 Τι είναι μια λειτουργία - ναι. 785 00:41:04,850 --> 00:41:05,380 >> ΦΟΙΤΗΤΗΣ 22: Είναι fread; 786 00:41:05,380 --> 00:41:06,070 >> JASON Hirschhorn: Fread. 787 00:41:06,070 --> 00:41:07,550 Νομίζω ας κολλήσει με η μία για τώρα. 788 00:41:07,550 --> 00:41:10,380 789 00:41:10,380 --> 00:41:13,650 Τι είδους επιχειρήματα δεν fread πάρει; 790 00:41:13,650 --> 00:41:17,410 >> ΦΟΙΤΗΤΗΣ 22: Μάλλον ο τύπος αρχείου, και στη συνέχεια θέση στο αρχείο; 791 00:41:17,410 --> 00:41:19,550 >> JASON Hirschhorn: Τι μπορώ να πληκτρολογήσετε εδώ να καταλάβω τι είδους επιχειρήματα 792 00:41:19,550 --> 00:41:20,950 fread παίρνει; 793 00:41:20,950 --> 00:41:23,710 >> ΠΟΛΛΑΠΛΕΣ ΦΟΙΤΗΤΕΣ: Man fread. 794 00:41:23,710 --> 00:41:24,740 >> JASON Hirschhorn: Man fread και fwrite. 795 00:41:24,740 --> 00:41:25,980 Μοιάζει κρεμούν έξω μαζί. 796 00:41:25,980 --> 00:41:29,589 Έτσι fread παίρνει πόσα επιχειρήματα; 797 00:41:29,589 --> 00:41:30,920 >> ΦΟΙΤΗΤΗΣ 23: Τέσσερα. 798 00:41:30,920 --> 00:41:32,690 >> JASON Hirschhorn: Παίρνει τέσσερα επιχειρήματα. 799 00:41:32,690 --> 00:41:41,100 Παίρνει ένα δείκτη, το μέγεθος, και ότι πράγμα, το οποίο είναι περίεργο, και κάποιο αρχείο. 800 00:41:41,100 --> 00:41:42,000 Εντάξει; 801 00:41:42,000 --> 00:41:43,990 Ας διαβάσουμε γι 'αυτό εδώ. 802 00:41:43,990 --> 00:41:49,370 «Η fread λειτουργία διαβάζει n memb τα στοιχεία των δεδομένων, κάθε μέγεθος bytes 803 00:41:49,370 --> 00:41:53,840 καιρό, από το ρεύμα που υποδεικνύεται από ρεύμα, την αποθήκευση τους στη θέση 804 00:41:53,840 --> 00:41:56,170 δίνεται από το δείκτη. " 805 00:41:56,170 --> 00:41:57,960 >> Έτσι, τέσσερα επιχειρήματα. 806 00:41:57,960 --> 00:42:04,510 Γιατί δεν μπορώ να αντιγράψω μόνο αυτό, και να το επικολλήσετε εδώ. 807 00:42:04,510 --> 00:42:10,060 808 00:42:10,060 --> 00:42:10,770 OK. 809 00:42:10,770 --> 00:42:13,673 Έτσι, ο οποίος μπορεί να ξεκινήσει τη συμπλήρωση τα επιχειρήματα αυτά για μένα; 810 00:42:13,673 --> 00:42:15,840 Avi. 811 00:42:15,840 --> 00:42:17,720 >> AVI: Βγάλτε το κενό. 812 00:42:17,720 --> 00:42:20,530 Βάλτε απλά src. 813 00:42:20,530 --> 00:42:23,142 Βγάλτε το δείκτη και το αστέρι. 814 00:42:23,142 --> 00:42:26,102 Βάλτε src. 815 00:42:26,102 --> 00:42:27,050 Στη συνέχεια - 816 00:42:27,050 --> 00:42:28,500 >> JASON Hirschhorn: Έτσι, Πάω να σταματήσει εκεί, γιατί αυτό είναι λάθος. 817 00:42:28,500 --> 00:42:32,590 818 00:42:32,590 --> 00:42:34,710 Έχεις δίκιο με src, αλλά όπου θα πρέπει src πάτε; 819 00:42:34,710 --> 00:42:35,960 >> [Παρεμβάλλοντας VOICES] 820 00:42:35,960 --> 00:42:38,976 821 00:42:38,976 --> 00:42:41,610 >> JASON Hirschhorn: Θα πρέπει πηγαίνετε εδώ. 822 00:42:41,610 --> 00:42:43,790 Αυτή είναι η src - src μας είναι ένας τύπος. 823 00:42:43,790 --> 00:42:44,610 Ας ρίξουμε μια ματιά εδώ. 824 00:42:44,610 --> 00:42:49,610 Αυτό ζητά τύπου FILE *, εμείς πραγματικά να δείτε τους συνήθως έτσι. 825 00:42:49,610 --> 00:42:57,630 Έτσι, αυτό που ζητά ένα επιχείρημα του πληκτρολογήστε FILE * ονομάζεται ρεύμα που είναι src. 826 00:42:57,630 --> 00:42:58,480 Εντάξει; 827 00:42:58,480 --> 00:43:00,410 >> Τι μέγεθος των πραγμάτων κάνουν θέλουμε να διαβάσουμε; 828 00:43:00,410 --> 00:43:03,340 Σας έδωσα αυτό το περιγραφή του προβλήματος. 829 00:43:03,340 --> 00:43:04,370 >> ΦΟΙΤΗΤΗΣ 24: Ένα byte σε μια στιγμή. 830 00:43:04,370 --> 00:43:05,340 >> JASON Hirschhorn: Ένα byte. 831 00:43:05,340 --> 00:43:08,205 Πόσο μεγάλο είναι ένα byte; 832 00:43:08,205 --> 00:43:11,642 Το μέγεθός του είναι σε bytes, οπότε τι μπορώ να βάλω εκεί; 833 00:43:11,642 --> 00:43:12,910 >> ΦΟΙΤΗΤΗΣ 25: One. 834 00:43:12,910 --> 00:43:14,730 >> JASON Hirschhorn: One. 835 00:43:14,730 --> 00:43:17,020 Δεξιά. 836 00:43:17,020 --> 00:43:19,940 Το μέγεθός του είναι μονάδα byte, έτσι 1 είναι 1 byte. 837 00:43:19,940 --> 00:43:22,284 Πόσα μπορώ να θέλουν να διαβάσουν σε μια στιγμή. 838 00:43:22,284 --> 00:43:23,520 >> ΦΟΙΤΗΤΗΣ 26: One; 839 00:43:23,520 --> 00:43:24,270 >> JASON Hirschhorn: Ένα πράγμα. 840 00:43:24,270 --> 00:43:28,540 Θέλω να διαβάσω ένα πράγμα του μεγέθους 1, ένα δάγκωμα σε μια στιγμή. 841 00:43:28,540 --> 00:43:32,110 Και πού μπορώ να το πω, αφού το διάβασα; 842 00:43:32,110 --> 00:43:35,050 843 00:43:35,050 --> 00:43:36,510 >> ΦΟΙΤΗΤΗΣ 27: Προορισμός; 844 00:43:36,510 --> 00:43:39,270 >> JASON Hirschhorn: Γι 'αυτό δεν μπορούμε να βάζουμε κατ 'ευθείαν στο σημείο προορισμού. 845 00:43:39,270 --> 00:43:40,800 >> ΦΟΙΤΗΤΗΣ 28: Εσύ θα θέσει το σε ένα τρίτο δείκτη; 846 00:43:40,800 --> 00:43:41,780 >> ΦΟΙΤΗΤΗΣ 27: Για τον προορισμό. 847 00:43:41,780 --> 00:43:42,270 >> JASON Hirschhorn: OK. 848 00:43:42,270 --> 00:43:42,630 Ναι. 849 00:43:42,630 --> 00:43:46,820 >> ΦΟΙΤΗΤΗΣ 29: Μπορείτε να δηλώσετε κάτι για να ενεργεί ως προσωρινή αποθήκευση νωρίτερα. 850 00:43:46,820 --> 00:43:47,350 >> JASON Hirschhorn: OK. 851 00:43:47,350 --> 00:43:50,080 Δώσε μου αυτό. 852 00:43:50,080 --> 00:43:53,930 >> ΦΟΙΤΗΤΗΣ 29: Ένα άλλο αρχείο δείκτη, ίσως; 853 00:43:53,930 --> 00:43:54,220 >> JASON Hirschhorn: OK. 854 00:43:54,220 --> 00:43:55,585 Έτσι, αυτό είναι άκυρο αστέρι - 855 00:43:55,585 --> 00:43:57,750 είναι ένα είδος κενού αστέρι, γι 'αυτό δεν πρέπει να είναι ένας δείκτης του αρχείου. 856 00:43:57,750 --> 00:44:02,520 Και αν είμαι ανάγνωση ενός byte, όπου θα ήταν ένα καλό μέρος 857 00:44:02,520 --> 00:44:03,850 για να αποθηκεύσετε ένα byte; 858 00:44:03,850 --> 00:44:04,660 >> ΦΟΙΤΗΤΗΣ 29: Μια σειρά; 859 00:44:04,660 --> 00:44:05,770 >> JASON Hirschhorn: Μια σειρά. 860 00:44:05,770 --> 00:44:07,730 OK. 861 00:44:07,730 --> 00:44:14,040 Και τι άλλο είναι κάτι που είναι ακριβώς το μέγεθος ενός byte; 862 00:44:14,040 --> 00:44:16,980 863 00:44:16,980 --> 00:44:18,060 >> ΦΟΙΤΗΤΗΣ 30: char *; 864 00:44:18,060 --> 00:44:18,530 >> ΦΟΙΤΗΤΗΣ 29: Ναι. 865 00:44:18,530 --> 00:44:19,880 >> JASON Hirschhorn: A char * δεν είναι ένα byte. 866 00:44:19,880 --> 00:44:20,440 >> ΦΟΙΤΗΤΗΣ 29: Μια χαρα. 867 00:44:20,440 --> 00:44:21,810 >> JASON Hirschhorn: Μια χαρα είναι ένα byte. 868 00:44:21,810 --> 00:44:22,920 Σωστά; 869 00:44:22,920 --> 00:44:26,740 Έτσι, ας την ονομάσουμε αυτό το ρυθμιστικό είναι ένα γενικό το όνομα που χρησιμοποιείται για αυτά τα πράγματα για να αποθηκεύσετε 870 00:44:26,740 --> 00:44:27,910 κάτι προσωρινά. 871 00:44:27,910 --> 00:44:30,880 Έτσι, μπορώ να δημιουργήσω ένα buffer. 872 00:44:30,880 --> 00:44:31,150 Σωστά; 873 00:44:31,150 --> 00:44:32,990 Αλλά δεν λαμβάνει ένα κενό *. 874 00:44:32,990 --> 00:44:38,660 Έτσι ίσως έχετε δίκιο, ότι θα πρέπει να είναι ένα ρυθμιστικό του μεγέθους 0. 875 00:44:38,660 --> 00:44:41,070 Γι 'αυτό αποθηκεύει ένα - 876 00:44:41,070 --> 00:44:41,280 σωστά. 877 00:44:41,280 --> 00:44:43,560 >> Επειδή αυτό το δικαίωμα εδώ - char buffer είναι ένας χαρακτήρας, αλλά 878 00:44:43,560 --> 00:44:45,110 αυτό παίρνει ένα κενό * - 879 00:44:45,110 --> 00:44:45,870 ένας δείκτης. 880 00:44:45,870 --> 00:44:50,640 Έτσι θα μπορούσα να κάνω αυτό και τώρα ρυθμιστικό είναι ένας δείκτης. 881 00:44:50,640 --> 00:44:53,214 Τι άλλο θα μπορούσα να κάνω; 882 00:44:53,214 --> 00:44:55,775 >> ΦΟΙΤΗΤΗΣ 31: Βάλτε ένα αστέρι δίπλα σε char. 883 00:44:55,775 --> 00:44:58,380 >> JASON Hirschhorn: Θα μπορούσα έχουν δημιουργήσει το char *. 884 00:44:58,380 --> 00:45:00,216 OK. 885 00:45:00,216 --> 00:45:03,131 Τι είναι ένα άλλο πράγμα που θα μπορούσα να κάνω; 886 00:45:03,131 --> 00:45:04,050 Ή ας πάει με αυτό. 887 00:45:04,050 --> 00:45:05,740 Char * buffer, ώστε ό, τι μπορώ να τοποθετήσω εδώ; 888 00:45:05,740 --> 00:45:08,290 889 00:45:08,290 --> 00:45:09,310 >> ΦΟΙΤΗΤΗΣ 31: Buffer. 890 00:45:09,310 --> 00:45:10,560 >> JASON Hirschhorn: Buffer. 891 00:45:10,560 --> 00:45:12,640 892 00:45:12,640 --> 00:45:14,500 Ρυθμιστικό είναι ένας δείκτης σε μια χαρα. 893 00:45:14,500 --> 00:45:19,480 Και σε αυτή τη θέση, είναι σαν να βάζουμε ένα byte κάτι που έχουμε διαβάσει. 894 00:45:19,480 --> 00:45:19,980 Ναι. 895 00:45:19,980 --> 00:45:20,700 Avi. 896 00:45:20,700 --> 00:45:21,230 >> AVI: Απλά μια γρήγορη ερώτηση. 897 00:45:21,230 --> 00:45:24,440 Θέλετε να malloc buffer; 898 00:45:24,440 --> 00:45:25,930 >> JASON Hirschhorn: Ποιος μπορεί να απάντηση στο ερώτημα αυτό; 899 00:45:25,930 --> 00:45:30,210 >> ΦΟΙΤΗΤΗΣ 32: Καλά, δεν πραγματικά σημείο σε τίποτα αυτή τη στιγμή, έτσι - 900 00:45:30,210 --> 00:45:32,610 >> JASON Hirschhorn: Αλλά κάνουμε θέλουμε να το malloc; 901 00:45:32,610 --> 00:45:35,600 >> ΦΟΙΤΗΤΗΣ 32: Αν ήταν να το κάνει αυτό Έτσι, υποθέτω, ναι, γιατί θα πρέπει να 902 00:45:35,600 --> 00:45:36,990 κάποια θέση για να επισημάνω. 903 00:45:36,990 --> 00:45:38,350 >> JASON Hirschhorn: Έχουμε πρέπει να το malloc; 904 00:45:38,350 --> 00:45:40,580 >> ΦΟΙΤΗΤΗΣ 33: Εάν πρόκειται να χρησιμοποιήσετε έξω από το βρόχο. 905 00:45:40,580 --> 00:45:42,524 >> JASON Hirschhorn: Πρόκειται να χρησιμοποιήσετε έξω από το βρόχο; 906 00:45:42,524 --> 00:45:44,392 >> ΦΟΙΤΗΤΗΣ 34: Ναι. 907 00:45:44,392 --> 00:45:44,860 >> ΦΟΙΤΗΤΗΣ 35: Περιμένετε. 908 00:45:44,860 --> 00:45:46,980 Θέλουμε να το δηλώσουν στο βρόχο σε πέραν; 909 00:45:46,980 --> 00:45:50,100 >> JASON Hirschhorn: Έτσι υποθέτω ότι έχουμε κάποια ψευδο ΕΝΩ βρόχο εδώ ότι είμαστε 910 00:45:50,100 --> 00:45:51,950 προσπαθώ να καταλάβω, ότι δεν έχουμε πάρει ακόμα. 911 00:45:51,950 --> 00:45:54,710 912 00:45:54,710 --> 00:45:56,010 Δεν χρειάζεται να το malloc. 913 00:45:56,010 --> 00:45:59,310 Είμαστε δραστηριοποιούνται σε κύριο, είναι μόνο πρόκειται για να χρησιμοποιηθεί μέσα σε αυτό το βρόχο. 914 00:45:59,310 --> 00:46:00,540 Δεν πρέπει να υπάρχουν έξω από αυτό. 915 00:46:00,540 --> 00:46:02,340 >> Έτσι μπορεί να είναι μια τοπική μεταβλητή. 916 00:46:02,340 --> 00:46:03,925 Έχετε ένα δείκτη για μια τοπική μεταβλητή. 917 00:46:03,925 --> 00:46:07,984 918 00:46:07,984 --> 00:46:09,590 >> ΦΟΙΤΗΤΗΣ 36: Αλλά δεν είναι επισημαίνοντας τίποτα. 919 00:46:09,590 --> 00:46:11,540 >> JASON Hirschhorn: Όχι, δεν είναι αρχικοποιείται σε τίποτα. 920 00:46:11,540 --> 00:46:12,790 Αλλά εμείς δεν πρόκειται να το χρησιμοποιήσετε επίσης. 921 00:46:12,790 --> 00:46:15,300 Εμείς πάμε για να βάλει κάτι στην είναι η πρώτη φορά που το χρησιμοποιείτε. 922 00:46:15,300 --> 00:46:16,580 Έτσι ώστε να φαίνεται εντάξει. 923 00:46:16,580 --> 00:46:17,780 Γι 'αυτό και δεν χρειάζεται malloc εδώ. 924 00:46:17,780 --> 00:46:19,360 Και νομίζω ότι είναι εντάξει όπως είναι. 925 00:46:19,360 --> 00:46:24,350 926 00:46:24,350 --> 00:46:25,790 OK. 927 00:46:25,790 --> 00:46:27,190 Έχουμε την fread γραμμή. 928 00:46:27,190 --> 00:46:28,490 Ας κάνουμε την επόμενη γραμμή. 929 00:46:28,490 --> 00:46:32,984 >> Αν θέλουμε να γράψουμε σε ένα αρχείο, τι είναι μια καλή λειτουργία για να χρησιμοποιήσετε για να το κάνουμε αυτό; 930 00:46:32,984 --> 00:46:33,770 >> ΦΟΙΤΗΤΗΣ 37: fwrite; 931 00:46:33,770 --> 00:46:35,140 >> ΦΟΙΤΗΤΗΣ 38: fprintf; 932 00:46:35,140 --> 00:46:36,010 >> JASON Hirschhorn: fprintf είναι ένα. 933 00:46:36,010 --> 00:46:37,260 Τι είναι ένα άλλο; 934 00:46:37,260 --> 00:46:37,680 >> ΦΟΙΤΗΤΗΣ 39: fwrite. 935 00:46:37,680 --> 00:46:38,510 >> JASON Hirschhorn: fwrite. 936 00:46:38,510 --> 00:46:41,250 Και για τους σκοπούς μας, fwrite, το οποίο είδαμε εδώ, είναι 937 00:46:41,250 --> 00:46:42,500 ίσως η καλύτερη επιλογή. 938 00:46:42,500 --> 00:46:51,970 939 00:46:51,970 --> 00:46:53,950 Παίρνει τέσσερα επιχειρήματα, καθώς και. 940 00:46:53,950 --> 00:46:57,570 Nishant, μπορεί να σας δώσει με τα επιχειρήματα; 941 00:46:57,570 --> 00:47:00,570 >> Nishant: εξέλιξη του πρώτου ατόμου να είναι ακριβώς buffer. 942 00:47:00,570 --> 00:47:02,210 >> JASON Hirschhorn: OK. 943 00:47:02,210 --> 00:47:06,752 >> Nishant: Το δεύτερο είναι ακριβώς πρόκειται να είναι 1. 944 00:47:06,752 --> 00:47:09,510 Η Τρίτη θα είναι 1. 945 00:47:09,510 --> 00:47:11,470 Και η τέταρτη θα είναι dst. 946 00:47:11,470 --> 00:47:18,010 947 00:47:18,010 --> 00:47:19,550 >> JASON Hirschhorn: Μήπως κάποιος έχει οποιεσδήποτε ερωτήσεις σχετικά με αυτή τη γραμμή; 948 00:47:19,550 --> 00:47:28,370 949 00:47:28,370 --> 00:47:29,130 Αυτό φαίνεται καλό. 950 00:47:29,130 --> 00:47:29,590 OK. 951 00:47:29,590 --> 00:47:34,250 Έτσι, τώρα μοιάζει με το ένα πράγμα είμαστε λείπει - στην πραγματικότητα, ας γράψουμε 952 00:47:34,250 --> 00:47:35,090 αυτή η τελευταία γραμμή. 953 00:47:35,090 --> 00:47:36,300 Κλείστε τα αρχεία. 954 00:47:36,300 --> 00:47:38,880 Ποιος μπορεί να μας τελειώσει το γράψιμο αυτές οι δύο τελευταίες γραμμές; 955 00:47:38,880 --> 00:47:39,120 Ναι. 956 00:47:39,120 --> 00:47:39,850 Συγγνώμη, αυτό είναι το όνομά σου; 957 00:47:39,850 --> 00:47:40,580 >> LUCY: Lucy. 958 00:47:40,580 --> 00:47:41,580 >> JASON Hirschhorn: Lucy. 959 00:47:41,580 --> 00:47:47,560 >> LUCY: Αδυναμία εγγραφής αρχείου src και, στη συνέχεια, Αδυναμία εγγραφής αρχείου προορισμού. 960 00:47:47,560 --> 00:47:52,430 >> JASON Hirschhorn: Αδυναμία εγγραφής αρχείου, ανοικτή paren, src, κοντά paren, ερωτηματικό. 961 00:47:52,430 --> 00:47:53,680 Και fclose - 962 00:47:53,680 --> 00:47:57,560 963 00:47:57,560 --> 00:47:58,090 ναι; 964 00:47:58,090 --> 00:48:01,710 >> LUCY: Ανοικτή παρενθέσεις, dst και στη συνέχεια ερωτηματικό. 965 00:48:01,710 --> 00:48:02,520 >> JASON Hirschhorn: Μεγάλη. 966 00:48:02,520 --> 00:48:04,338 Και τι πρέπει να περιλαμβάνουν στο τέλος; 967 00:48:04,338 --> 00:48:05,210 >> LUCY: Επιστροφή 0. 968 00:48:05,210 --> 00:48:05,570 >> JASON Hirschhorn: Επιστροφή 0. 969 00:48:05,570 --> 00:48:06,820 Πρέπει να κάνω; 970 00:48:06,820 --> 00:48:10,560 971 00:48:10,560 --> 00:48:12,590 Απλά μια ερώτηση. 972 00:48:12,590 --> 00:48:14,957 Μήπως πρέπει να περιλαμβάνει την επιστροφή 0? 973 00:48:14,957 --> 00:48:16,240 >> ΠΟΛΛΑΠΛΕΣ ΦΟΙΤΗΤΕΣ: Όχι. 974 00:48:16,240 --> 00:48:16,430 >> JASON Hirschhorn: Όχι. 975 00:48:16,430 --> 00:48:18,090 Κύρια κάνει αυτόματα αν μπορείτε να φτάσετε στο τέλος. 976 00:48:18,090 --> 00:48:20,580 Αλλά νομίζω ότι είναι ωραίο να περιλαμβάνει ρητό. 977 00:48:20,580 --> 00:48:23,860 Ειδικά όταν γυρίζουμε άλλες τα πράγματα σε όλο το πρόγραμμα. 978 00:48:23,860 --> 00:48:24,810 OK. 979 00:48:24,810 --> 00:48:26,230 Αυτό είναι ό, τι μας λείπει - 980 00:48:26,230 --> 00:48:28,520 ΕΝΩ τι; 981 00:48:28,520 --> 00:48:31,630 Ποιος μπορεί να σκεφτεί κάποια - 982 00:48:31,630 --> 00:48:35,240 έχει κάποια αίσθηση του τι πράγματα θα μπορούσε να πάει εκεί; 983 00:48:35,240 --> 00:48:37,350 Ακόμα κι αν είναι μόνο σε κάποια pseudocode όπως η γλώσσα; 984 00:48:37,350 --> 00:48:41,330 >> Τι είμαστε πραγματικά - τι θέλουμε να πάει μέχρι; 985 00:48:41,330 --> 00:48:41,980 Ναι, Lucy. 986 00:48:41,980 --> 00:48:43,240 >> LUCY: Το τέλος του αρχείου. 987 00:48:43,240 --> 00:48:44,990 >> JASON Hirschhorn: Το τέλος του αρχείου. 988 00:48:44,990 --> 00:48:49,280 Λοιπόν, τι εννοείτε με το τέλος του αρχείου; 989 00:48:49,280 --> 00:48:50,955 >> LUCY: Μόλις φτάσετε το τέλος του αρχείου, να σταματήσει. 990 00:48:50,955 --> 00:48:51,240 >> JASON Hirschhorn: OK. 991 00:48:51,240 --> 00:48:53,460 Έτσι, τη στιγμή που θα φτάσει στο τέλος του αρχείου. 992 00:48:53,460 --> 00:48:56,893 Πώς ξέρουμε ότι όταν έχουμε φτάσει το τέλος του αρχείου; 993 00:48:56,893 --> 00:48:59,900 >> ΦΟΙΤΗΤΗΣ 40: Νομίζω ρυθμιστικό θα οριστεί στην τιμή NULL. 994 00:48:59,900 --> 00:49:01,885 >> ΦΟΙΤΗΤΗΣ 41: Ρυθμιστικό δηλώνεται μέσα στο βρόχο. 995 00:49:01,885 --> 00:49:03,670 >> JASON Hirschhorn: Έτσι νομίζετε ότι ρυθμιστικό θα πρέπει να οριστεί στην τιμή NULL. 996 00:49:03,670 --> 00:49:05,850 Γιατί θα buffer να οριστεί στην τιμή NULL; 997 00:49:05,850 --> 00:49:10,420 >> ΦΟΙΤΗΤΗΣ 40: Διότι όταν fread, προσπαθείτε να βάλετε 998 00:49:10,420 --> 00:49:13,528 τίποτα σε ρυθμιστικό. 999 00:49:13,528 --> 00:49:13,980 >> JASON Hirschhorn: OK. 1000 00:49:13,980 --> 00:49:15,550 Έτσι σκέφτεστε fread - 1001 00:49:15,550 --> 00:49:19,000 όταν έχουμε φτάσει στο τέλος της αρχείο, τι fread πρόκειται να κάνει; 1002 00:49:19,000 --> 00:49:21,230 Νομίζω ότι αυτό είναι το ερώτημα πρέπει να καταλάβουμε. 1003 00:49:21,230 --> 00:49:21,960 Τι σημαίνει fread κάνουμε; 1004 00:49:21,960 --> 00:49:25,640 Μήπως βάζετε μηδενική σε ρυθμιστικό, ή μήπως συμβαίνει κάτι άλλο; 1005 00:49:25,640 --> 00:49:27,510 Πώς μπορούμε να καταλάβουμε τι κάνει; 1006 00:49:27,510 --> 00:49:28,190 >> ΦΟΙΤΗΤΗΣ 42: Man. 1007 00:49:28,190 --> 00:49:28,810 >> JASON Hirschhorn: Man. 1008 00:49:28,810 --> 00:49:32,280 Έτσι, ας ρίξουμε μια ματιά εδώ. 1009 00:49:32,280 --> 00:49:34,000 Επιστροφή αξία. 1010 00:49:34,000 --> 00:49:39,620 Την επιτυχία, fread και fwrite επιστρέψει το αριθμό των ειδών που διαβάζεται ή γράφεται. 1011 00:49:39,620 --> 00:49:43,700 Αυτός ο αριθμός ισούται με τον αριθμό των bytes μεταφερθούν μόνο όταν το μέγεθος είναι 1. 1012 00:49:43,700 --> 00:49:47,780 Εάν παρουσιαστεί κάποιο σφάλμα, ή το τέλος της επιτευχθεί το αρχείο, η τιμή που επιστρέφεται είναι ένα 1013 00:49:47,780 --> 00:49:51,490 σύντομη καταμέτρηση στοιχείο ή 0. 1014 00:49:51,490 --> 00:49:57,860 >> Έτσι, για τους σκοπούς μας, αν fread φτάνει το τέλος του αρχείου, και διαβάζει από το 1015 00:49:57,860 --> 00:50:02,100 το τέλος του αρχείου, δεν υπάρχει τίποτα που αφήνεται να διαβάσετε, τι πρόκειται να επιστρέψει; 1016 00:50:02,100 --> 00:50:03,290 >> ΦΟΙΤΗΤΗΣ 43: Zero; 1017 00:50:03,290 --> 00:50:04,540 >> JASON Hirschhorn: Τι; 1018 00:50:04,540 --> 00:50:05,300 >> ΦΟΙΤΗΤΗΣ 43: Zero; 1019 00:50:05,300 --> 00:50:05,690 >> JASON Hirschhorn: Μηδέν. 1020 00:50:05,690 --> 00:50:06,940 Είναι πρόκειται να επιστρέψει στο μηδέν. 1021 00:50:06,940 --> 00:50:09,360 1022 00:50:09,360 --> 00:50:13,010 Έτσι, γνωρίζουμε ότι fread, όταν έχουμε φτάσει στο τέλος του αρχείου, πρόκειται 1023 00:50:13,010 --> 00:50:13,690 να επιστρέψει το μηδέν. 1024 00:50:13,690 --> 00:50:17,460 Πώς μπορούμε να χρησιμοποιήσουμε προς όφελός μας; 1025 00:50:17,460 --> 00:50:21,733 >> AVI: Μπορείτε να δηλώσετε μια μεταβλητή έξω του βρόγχου που ονομάζεται επιταγή. 1026 00:50:21,733 --> 00:50:27,040 Εάν η επιταγή είναι ίσο με - 1027 00:50:27,040 --> 00:50:28,190 για τώρα - ένα. 1028 00:50:28,190 --> 00:50:28,920 >> JASON Hirschhorn: OK. 1029 00:50:28,920 --> 00:50:38,050 >> AVI: Και τότε μπορείτε να βάλετε ένα IF δήλωση αμέσως μετά fread λέγοντας ότι αν 1030 00:50:38,050 --> 00:50:42,600 fread ισούται με το μηδέν - 1031 00:50:42,600 --> 00:50:43,850 ηο. 1032 00:50:43,850 --> 00:50:46,002 1033 00:50:46,002 --> 00:50:47,252 >> JASON Hirschhorn: Ποιος μπορεί να βοηθήσει Avi έξω; 1034 00:50:47,252 --> 00:50:49,690 1035 00:50:49,690 --> 00:50:52,410 >> AVI: Ποια είναι η αξία επιστρέφονται από fread; 1036 00:50:52,410 --> 00:50:54,060 >> JASON Hirschhorn: Εμείς απλά πήγε πάνω από αυτό. 1037 00:50:54,060 --> 00:50:55,450 >> AVI: Πώς θα την εκπροσωπήσει; 1038 00:50:55,450 --> 00:50:57,190 >> JASON Hirschhorn: Έτσι επιστρέφει - ας κοιτάξτε εδώ - επιστρέφει ένα 1039 00:50:57,190 --> 00:50:59,340 size_t, το οποίο είναι κατ 'ουσίαν ένας ακέραιος. 1040 00:50:59,340 --> 00:51:02,240 1041 00:51:02,240 --> 00:51:03,410 Έτσι επιστρέφει έναν ακέραιο. 1042 00:51:03,410 --> 00:51:05,160 Και στην περίπτωσή μας, θα επιστρέφει 1 ή 0 - 1043 00:51:05,160 --> 00:51:08,760 1 αν το διαβάσετε ένα πράγμα - ένα byte, και 0 αν έχουμε φτάσει στο τέλος. 1044 00:51:08,760 --> 00:51:13,560 1045 00:51:13,560 --> 00:51:16,450 Έτσι, αν fread - 1046 00:51:16,450 --> 00:51:16,855 ναι; 1047 00:51:16,855 --> 00:51:20,330 >> ΦΟΙΤΗΤΗΣ 45: Δεν μπορείτε απλά να βάλετε το πλήρες fread (ρυθμιστικό διάλυμα, 1, 1, src) εντός της 1048 00:51:20,330 --> 00:51:21,660 while loop; 1049 00:51:21,660 --> 00:51:26,510 >> JASON Hirschhorn: Έτσι σας προτείνουμε κάνει αυτό σε εκεί; 1050 00:51:26,510 --> 00:51:27,600 >> [Παρεμβάλλοντας VOICES] 1051 00:51:27,600 --> 00:51:29,520 >> JASON Hirschhorn: Περίμενε. 1052 00:51:29,520 --> 00:51:30,885 Έτσι είμαστε απαλλαγεί από αυτό. 1053 00:51:30,885 --> 00:51:33,300 Έτσι είστε προτείνοντας την τοποθέτηση fread σε εκεί; 1054 00:51:33,300 --> 00:51:35,457 Τι θα πρέπει να επίσης να μετακινήσετε αν θέλετε να το κάνετε αυτό; 1055 00:51:35,457 --> 00:51:36,740 >> ΦΟΙΤΗΤΗΣ 45: Το ρυθμιστικό έξω. 1056 00:51:36,740 --> 00:51:38,110 >> JASON Hirschhorn: Θα πρέπει να επίσης να μετακινήσετε αυτό εδώ. 1057 00:51:38,110 --> 00:51:41,700 >> ΦΟΙΤΗΤΗΣ 45: Αλλά μήπως ότι συνεχώς μετακινήσετε προς τα εμπρός; 1058 00:51:41,700 --> 00:51:42,950 >> [Παρεμβάλλοντας VOICES] 1059 00:51:42,950 --> 00:51:46,540 1060 00:51:46,540 --> 00:51:47,470 >> JASON Hirschhorn: OK. 1061 00:51:47,470 --> 00:51:50,570 Έτσι, αυτό είναι ό, τι προτείνεται Okshar. 1062 00:51:50,570 --> 00:51:51,930 Δημιουργούμε ρυθμιστικό μας. 1063 00:51:51,930 --> 00:51:57,020 Εμείς ΕΝΩ fread, τότε fwrite. 1064 00:51:57,020 --> 00:51:59,760 Σκέψεις σχετικά με αυτό; 1065 00:51:59,760 --> 00:52:04,050 >> ΦΟΙΤΗΤΗΣ 46: μόνο ερώτημα μου είναι, θα να εκτελέσει πράγματι την fread εντολή; 1066 00:52:04,050 --> 00:52:06,175 >> JASON Hirschhorn: Μεγάλη ερώτηση. 1067 00:52:06,175 --> 00:52:11,050 Όταν βάζετε μια κλήση της συνάρτησης μέσα από μια κατάσταση, κάνει ότι 1068 00:52:11,050 --> 00:52:12,300 κλήση της συνάρτησης εκτελέσει; 1069 00:52:12,300 --> 00:52:15,760 1070 00:52:15,760 --> 00:52:17,770 Έχουμε δει παραδείγματα πριν. 1071 00:52:17,770 --> 00:52:24,900 1072 00:52:24,900 --> 00:52:25,660 Σωστά; 1073 00:52:25,660 --> 00:52:26,125 >> ΦΟΙΤΗΤΗΣ 46: OK. 1074 00:52:26,125 --> 00:52:26,590 Ναι. 1075 00:52:26,590 --> 00:52:30,140 Γι 'αυτό δεν εκτελέσει. 1076 00:52:30,140 --> 00:52:31,790 >> JASON Hirschhorn: Έχουμε δει τα πράγματα όπως εκείνο πριν, όπου έχουμε μια 1077 00:52:31,790 --> 00:52:33,550 κλήση της συνάρτησης μέσα από μια κατάσταση. 1078 00:52:33,550 --> 00:52:35,540 Μήπως αυτό κλήση της συνάρτησης εκτελέσει; 1079 00:52:35,540 --> 00:52:36,350 Ναι. 1080 00:52:36,350 --> 00:52:37,410 Έτσι, η απάντηση είναι ναι. 1081 00:52:37,410 --> 00:52:41,010 Αυτή η κλήση της συνάρτησης θα εκτελέσει. 1082 00:52:41,010 --> 00:52:42,418 Αλλά και πάλι, είναι αυτό που θέλουμε; 1083 00:52:42,418 --> 00:52:49,250 1084 00:52:49,250 --> 00:52:52,204 >> Τι είναι ένας τρόπος με τον οποίο μπορούσα να καταλάβω αν είναι αυτό που θέλουμε; 1085 00:52:52,204 --> 00:52:53,470 >> ΠΟΛΛΑΠΛΕΣ ΦΟΙΤΗΤΕΣ: Εκτελέστε αυτό; 1086 00:52:53,470 --> 00:52:54,460 >> JASON Hirschhorn: Θα μπορούσαμε να το τρέξει. 1087 00:52:54,460 --> 00:52:57,500 Αλλά πριν το κάνουμε αυτό, θα μπορούσαμε να Επίσης λόγο μέσα από αυτό. 1088 00:52:57,500 --> 00:52:57,920 Αν - 1089 00:52:57,920 --> 00:53:01,920 πούμε ότι έχουμε ένα byte σε μας αρχείο, θα φτάσουμε εδώ, 1090 00:53:01,920 --> 00:53:02,660 θα φτάσουμε σε αυτόν τον κώδικα. 1091 00:53:02,660 --> 00:53:03,620 Αυτό θα τρέξει. 1092 00:53:03,620 --> 00:53:07,780 fread θα επιστρέψει ένα byte και αποθηκεύσει στο buffer. 1093 00:53:07,780 --> 00:53:11,290 Και αυτό πρέπει να εκτιμήσουμε σε 1, δεξιά, αφού επιστρέφει 1. 1094 00:53:11,290 --> 00:53:12,640 >> Έτσι, ΕΝΩ 1. 1095 00:53:12,640 --> 00:53:15,325 Αυτό σημαίνει ότι ο κώδικας μέσα Ο βρόχος while θα εκτελέσει; 1096 00:53:15,325 --> 00:53:15,453 >> ΦΟΙΤΗΤΗΣ 47: Ναι. 1097 00:53:15,453 --> 00:53:16,040 Είναι αλήθεια. 1098 00:53:16,040 --> 00:53:16,290 >> JASON Hirschhorn: Ναι. 1099 00:53:16,290 --> 00:53:17,490 1 είναι αληθές. 1100 00:53:17,490 --> 00:53:18,240 Δεν είναι 0. 1101 00:53:18,240 --> 00:53:20,360 Έτσι ο κώδικας εδώ μέσα θα εκτελέσει. 1102 00:53:20,360 --> 00:53:22,300 Έτσι, θα γράψουμε αυτό. 1103 00:53:22,300 --> 00:53:25,340 Θα κινηθεί πίσω σε αυτό γραμμή και πάλι. 1104 00:53:25,340 --> 00:53:26,850 Τώρα έχουμε - 1105 00:53:26,850 --> 00:53:28,550 είμαστε στο τέλος του αρχείου μας. 1106 00:53:28,550 --> 00:53:30,980 Διαβάζουμε από το τέλος του αρχείου μας, γιατί είχαμε μόνο ένα byte σε αυτό. 1107 00:53:30,980 --> 00:53:34,270 >> Fread επιστρέφει 0, καταστήματα κάτι σε ρυθμιστικό. 1108 00:53:34,270 --> 00:53:35,890 Ειλικρινά δεν ξέρω τι αποθηκεύει στη μνήμη. 1109 00:53:35,890 --> 00:53:38,380 Θα μπορούσαμε ίσως να αναζητήσετε για να δούμε τι κάνει. 1110 00:53:38,380 --> 00:53:40,130 Αυτό Ειλικρινά δεν ξέρω. 1111 00:53:40,130 --> 00:53:43,090 Δεν ξέρουμε, ποιος νοιάζεται τι αποθηκεύει σε ρυθμιστικό; 1112 00:53:43,090 --> 00:53:44,010 Αλλά δεν επιστρέφει 0. 1113 00:53:44,010 --> 00:53:45,440 Και ενώ θα εκτελέσει 0; 1114 00:53:45,440 --> 00:53:49,950 1115 00:53:49,950 --> 00:53:51,180 >> ΕΝΩ 0 δεν θα εκτελέσει. 1116 00:53:51,180 --> 00:53:54,030 Έτσι, τότε θα μετακινηθεί προς τα κάτω εδώ. 1117 00:53:54,030 --> 00:53:58,870 Έτσι, ας πάρει μια ανάταση των χεριών, αν αυτό είναι ο κώδικας θα πρέπει να τρέξουμε, ή αν 1118 00:53:58,870 --> 00:54:00,140 πρέπει να κάνει αλλαγές πρώτα. 1119 00:54:00,140 --> 00:54:02,180 Έτσι, αν νομίζετε ότι - θα πρέπει να ψηφίσετε. 1120 00:54:02,180 --> 00:54:06,885 Αν νομίζετε ότι θα πρέπει να εκτελέσετε αυτόν τον κώδικα όπως είναι, παρακαλώ σηκώστε το χέρι σας. 1121 00:54:06,885 --> 00:54:12,440 1122 00:54:12,440 --> 00:54:13,400 >> OK. 1123 00:54:13,400 --> 00:54:14,315 Υπάρχει ένα - 1124 00:54:14,315 --> 00:54:17,260 έχετε κάποια ερώτηση, ανησυχία; 1125 00:54:17,260 --> 00:54:18,080 Ναι. 1126 00:54:18,080 --> 00:54:21,240 >> ΦΟΙΤΗΤΗΣ 48: Μετά προχωράμε ρυθμιστικό έξω από το βρόχο, εμείς 1127 00:54:21,240 --> 00:54:22,670 πρέπει να το malloc; 1128 00:54:22,670 --> 00:54:23,310 >> JASON Hirschhorn: Μεγάλη ερώτηση. 1129 00:54:23,310 --> 00:54:26,670 Μετά προχωρούμε ρυθμιστικό έξω από το βρόχου, δεν πρέπει να το malloc; 1130 00:54:26,670 --> 00:54:28,400 Αυτό είναι ένα ερώτημα το πεδίο εφαρμογής. 1131 00:54:28,400 --> 00:54:32,130 Αν προετοιμαστεί ρυθμιστικό έξω αυτού του βρόχου, θα υπάρχουν 1132 00:54:32,130 --> 00:54:33,534 εσωτερικό του βρόχου; 1133 00:54:33,534 --> 00:54:35,230 >> ΠΟΛΛΑΠΛΕΣ ΦΟΙΤΗΤΕΣ: Ναι. 1134 00:54:35,230 --> 00:54:35,580 >> JASON Hirschhorn: Ναι. 1135 00:54:35,580 --> 00:54:40,100 Το πεδίο εφαρμογής της καλύπτει μέσα από το βρόχο, και, πραγματικά, τίποτα κάτω από το εσωτερικό 1136 00:54:40,100 --> 00:54:42,460 του εν λόγω κώδικα, συμπεριλαμβανομένης της τα πράγματα εδώ μέσα. 1137 00:54:42,460 --> 00:54:43,930 Γι 'αυτό και δεν χρειάζεται να το malloc. 1138 00:54:43,930 --> 00:54:47,766 Είναι μια τοπική μεταβλητή, και το πεδίο εφαρμογής της εξακολουθεί να περιλαμβάνει το βρόχο. 1139 00:54:47,766 --> 00:54:49,540 >> ΦΟΙΤΗΤΗΣ 49: Μήπως θα πρέπει να το ελευθερώσει; 1140 00:54:49,540 --> 00:54:51,770 >> JASON Hirschhorn: Έχουμε πρέπει να ελεύθερο buffer; 1141 00:54:51,770 --> 00:54:53,860 >> ΦΟΙΤΗΤΗΣ 49: Ναι, αν δεν το κάνουμε malloc. 1142 00:54:53,860 --> 00:54:55,750 >> JASON Hirschhorn: Έχουμε πρέπει να ελεύθερο buffer; 1143 00:54:55,750 --> 00:54:57,160 Εμείς δεν κάνουμε. 1144 00:54:57,160 --> 00:55:01,280 Και πάλι, είναι μια τοπική μεταβλητή, γι 'αυτό δεν χρειάζεται να το απελευθερώσει. 1145 00:55:01,280 --> 00:55:02,170 OK. 1146 00:55:02,170 --> 00:55:03,480 Ας δούμε τι θα συμβεί. 1147 00:55:03,480 --> 00:55:17,290 1148 00:55:17,290 --> 00:55:18,220 Γι 'αυτό είναι προετοιμαστεί. 1149 00:55:18,220 --> 00:55:20,830 Αυτό ήταν ό, τι κάτι που Marcus προτάθηκε νωρίτερα. 1150 00:55:20,830 --> 00:55:25,340 Έτσι έχουμε το σφάλμα αυτό, η μεταβλητή buffer Αγνωστο είναι όταν χρησιμοποιείται εδώ. 1151 00:55:25,340 --> 00:55:26,590 >> Πώς μπορούμε να το διορθώσω αυτό; 1152 00:55:26,590 --> 00:55:29,460 1153 00:55:29,460 --> 00:55:30,960 >> ΦΟΙΤΗΤΗΣ 50: malloc αυτό; 1154 00:55:30,960 --> 00:55:31,770 >> ΦΟΙΤΗΤΗΣ 51: Ίσο NULL; 1155 00:55:31,770 --> 00:55:33,000 >> ΦΟΙΤΗΤΗΣ 52: Πείτε ρυθμιστικό ισούται με NULL. 1156 00:55:33,000 --> 00:55:34,250 >> JASON Hirschhorn: OK. 1157 00:55:34,250 --> 00:55:40,040 1158 00:55:40,040 --> 00:55:40,770 Φαίνεται καλό. 1159 00:55:40,770 --> 00:55:42,410 Εμείς το έχουμε τώρα. 1160 00:55:42,410 --> 00:55:45,630 Ας δημιουργήσουμε κάτι για να δοκιμάσετε να αντιγράψετε. 1161 00:55:45,630 --> 00:56:08,990 1162 00:56:08,990 --> 00:56:10,490 Έτσι έχουμε αρχείο κειμένου μας. 1163 00:56:10,490 --> 00:56:11,740 Πώς μπορούμε να τρέξει αυτό το πρόγραμμα; 1164 00:56:11,740 --> 00:56:14,140 1165 00:56:14,140 --> 00:56:15,472 Ναι. 1166 00:56:15,472 --> 00:56:22,230 >> ΦΟΙΤΗΤΗΣ 53: Μπορείτε να κάνετε dot κάθετο cp, test.txt. 1167 00:56:22,230 --> 00:56:25,140 Και τότε μπορείτε να ονομάσετε ένα άλλο αρχείο το οποίο θα αποθηκεύει σε. 1168 00:56:25,140 --> 00:56:25,510 >> JASON Hirschhorn: OK. 1169 00:56:25,510 --> 00:56:27,380 Θα το ονομάσουμε out.txt. 1170 00:56:27,380 --> 00:56:28,630 Cool; 1171 00:56:28,630 --> 00:56:31,700 1172 00:56:31,700 --> 00:56:34,320 Ακολ σφάλμα. 1173 00:56:34,320 --> 00:56:35,570 Σκέψεις σχετικά με το σφάλμα seg; 1174 00:56:35,570 --> 00:56:40,900 1175 00:56:40,900 --> 00:56:41,390 Αυτό είναι μεγάλη. 1176 00:56:41,390 --> 00:56:45,040 Πώς μπορούμε να βρούμε από πού το σφάλμα seg είναι; 1177 00:56:45,040 --> 00:56:45,680 Τι; 1178 00:56:45,680 --> 00:56:45,990 >> ΦΟΙΤΗΤΗΣ 54: Gdb. 1179 00:56:45,990 --> 00:56:47,240 >> JASON Hirschhorn: Gdb. 1180 00:56:47,240 --> 00:56:51,400 1181 00:56:51,400 --> 00:56:55,300 Τρέχουμε gdb γράφοντας gdb dot κάθετος, το όνομα του προγράμματός μας. 1182 00:56:55,300 --> 00:56:57,020 Δεν υπάρχουν επιχειρήματα της γραμμής εντολών εκεί. 1183 00:56:57,020 --> 00:56:59,570 Εμείς πάμε για να ορίσετε ένα breakpoint στο κεντρικό. 1184 00:56:59,570 --> 00:57:02,190 Αν θέλω να ξεκινήσω gdb, τι μπορώ να κάνω; 1185 00:57:02,190 --> 00:57:02,730 >> ΦΟΙΤΗΤΗΣ 55: R. 1186 00:57:02,730 --> 00:57:08,910 >> JASON Hirschhorn: R. Και μετά τι; 1187 00:57:08,910 --> 00:57:09,400 >> ΦΟΙΤΗΤΗΣ 55: Τα επιχειρήματα; 1188 00:57:09,400 --> 00:57:10,650 >> JASON Hirschhorn: Στη συνέχεια, η τα επιχειρήματα της γραμμής εντολών. 1189 00:57:10,650 --> 00:57:15,890 1190 00:57:15,890 --> 00:57:17,120 Ας δούμε. 1191 00:57:17,120 --> 00:57:19,090 Ν παίρνει μόνο με γραμμή προς γραμμή. 1192 00:57:19,090 --> 00:57:21,450 Πάω να πάει μέχρι Παίρνω seg δικό μου λάθος. 1193 00:57:21,450 --> 00:57:22,700 Υπάρχει seg δικό μου λάθος. 1194 00:57:22,700 --> 00:57:24,960 1195 00:57:24,960 --> 00:57:27,875 Μοιάζει fread προκαλείται seg δικό μου λάθος. 1196 00:57:27,875 --> 00:57:30,570 1197 00:57:30,570 --> 00:57:32,770 Ξέρω fread προκάλεσε seg δικό μου λάθος, διότι αυτό ήταν το 1198 00:57:32,770 --> 00:57:34,950 γραμμή που μόλις εκτελεστεί. 1199 00:57:34,950 --> 00:57:36,530 >> Και το μόνο πράγμα που ήταν συμβαίνει σε αυτήν τη γραμμή - 1200 00:57:36,530 --> 00:57:37,520 δύο πράγματα συμβαίνουν. 1201 00:57:37,520 --> 00:57:40,610 Fread πήγαινε, και τότε θα ήταν κάνει κάποιο έλεγχο ΕΝΩ. 1202 00:57:40,610 --> 00:57:44,820 Είμαι πρόθυμος να στοιχηματίσει ότι η ΕΝΩ έλεγχο δεν προκαλεί seg δικό μου λάθος. 1203 00:57:44,820 --> 00:57:46,950 Το πιο πιθανό, fread ήταν προκαλώντας seg δικό μου λάθος. 1204 00:57:46,950 --> 00:57:49,260 Βλέπω επίσης κάτι εδώ, memcopy. 1205 00:57:49,260 --> 00:57:50,500 >> Αντίγραφο της μνήμης. 1206 00:57:50,500 --> 00:57:53,820 Ακούγεται σαν να κινείται από τη μνήμη μία θέση στην άλλη. 1207 00:57:53,820 --> 00:57:56,890 Ακούγεται σαν κάτι που θα μπορούσε να συμβεί σε fread, ίσως κάποια μνήμη 1208 00:57:56,890 --> 00:57:58,910 κινείται από εδώ και εδώ. 1209 00:57:58,910 --> 00:58:01,740 1210 00:58:01,740 --> 00:58:03,860 Ας πάμε μέσα από αυτό και πάλι. 1211 00:58:03,860 --> 00:58:06,900 Πώς μπορώ να ξεκινήσετε από την αρχή και να τρέξει και πάλι; 1212 00:58:06,900 --> 00:58:08,092 Ναι. 1213 00:58:08,092 --> 00:58:15,140 >> ΦΟΙΤΗΤΗΣ 56: Μήπως θα πρέπει να θέσει ένα εμπορικό πριν buffer; 1214 00:58:15,140 --> 00:58:17,800 >> JASON Hirschhorn: Έτσι εμπορικό πριν buffer θα μου δώσει τη διεύθυνση του 1215 00:58:17,800 --> 00:58:22,330 buffer, το οποίο είναι ένα char *. 1216 00:58:22,330 --> 00:58:25,250 Ας τρέχει μέσα από αυτό για μια ακόμη φορά. 1217 00:58:25,250 --> 00:58:28,248 Πώς μπορώ να τρέχει μέσα από αυτό για άλλη μια φορά; 1218 00:58:28,248 --> 00:58:29,210 >> ΦΟΙΤΗΤΗΣ 57: Μπορεί απλά πληκτρολογήστε τρέξει και πάλι; 1219 00:58:29,210 --> 00:58:32,050 >> JASON Hirschhorn: Απλά πληκτρολογήστε και πάλι τρέξιμο. 1220 00:58:32,050 --> 00:58:33,415 Γι 'αυτό και δεν πρόκειται να εκτελέσει αυτή τη γραμμή. 1221 00:58:33,415 --> 00:58:36,250 1222 00:58:36,250 --> 00:58:39,240 Έτσι buffer είναι ένας δείκτης NULL. 1223 00:58:39,240 --> 00:58:40,490 Διορθώστε; 1224 00:58:40,490 --> 00:58:45,870 1225 00:58:45,870 --> 00:58:47,060 Είναι επισημαίνοντας - ας δούμε. 1226 00:58:47,060 --> 00:58:48,500 Αν έχουμε μας - 1227 00:58:48,500 --> 00:58:50,430 σχεδιάσετε μια γρήγορη εικόνα σχετικά με αυτό. 1228 00:58:50,430 --> 00:58:53,500 Μπορεί ο καθένας να δούμε αν Γράφω εδώ; 1229 00:58:53,500 --> 00:59:02,890 >> Έτσι στη στοίβα, έχουμε ένα τοπικό μεταβλητή και ονομάζεται buffer, και 1230 00:59:02,890 --> 00:59:08,230 Είναι ένας δείκτης σε char. 1231 00:59:08,230 --> 00:59:10,325 Ποια είναι αυτή η διεύθυνση char σε; 1232 00:59:10,325 --> 00:59:12,550 >> ΦΟΙΤΗΤΗΣ 58: 0x0. 1233 00:59:12,550 --> 00:59:13,400 >> JASON Hirschhorn: Σωστά. 1234 00:59:13,400 --> 00:59:14,200 Αυτό είναι τι είναι αυτό. 1235 00:59:14,200 --> 00:59:17,600 Εδώ, μέσα στο ρυθμιστικό, αποθηκεύεται 0x0. 1236 00:59:17,600 --> 00:59:20,480 Αυτό είναι ό, τι έχουμε - η setup που έχουμε τώρα. 1237 00:59:20,480 --> 00:59:27,540 Έτσι, αυτή η γραμμή, fread, βάζει κάτι από την πηγή πού; 1238 00:59:27,540 --> 00:59:30,560 Σε αυτό το πλαίσιο ή το παράθυρο; 1239 00:59:30,560 --> 00:59:31,060 Ποιο κουτί; 1240 00:59:31,060 --> 00:59:33,290 Αριστερά ή δεξιά κουτί κουτί; 1241 00:59:33,290 --> 00:59:34,750 Το δικαίωμα αυτό το πλαίσιο. 1242 00:59:34,750 --> 00:59:38,440 >> Επομένως, το δείκτη, και βάζει εδώ. 1243 00:59:38,440 --> 00:59:42,620 Όταν προσπαθούμε και τη μνήμη αφής σε θέση 0, τι έχουμε; 1244 00:59:42,620 --> 00:59:45,050 Ένα σφάλμα κατάτμησης. 1245 00:59:45,050 --> 00:59:46,550 Αυτό είναι το λάθος που έχουμε τώρα. 1246 00:59:46,550 --> 00:59:46,970 Ναι. 1247 00:59:46,970 --> 00:59:48,410 >> ΦΟΙΤΗΤΗΣ 59: Μην έχετε να θέσει ρυθμιστικό αστέρι; 1248 00:59:48,410 --> 00:59:49,180 Ή όχι; 1249 00:59:49,180 --> 00:59:50,050 Για fread; 1250 00:59:50,050 --> 00:59:51,450 >> JASON Hirschhorn: Έτσι fread παίρνει ένα δείκτη. 1251 00:59:51,450 --> 00:59:54,920 1252 00:59:54,920 --> 00:59:55,900 Έτσι ώστε να περνά σε ρυθμιστικό διάλυμα. 1253 00:59:55,900 --> 00:59:58,980 Και τότε θα απο-αναφορά κάπου μέσα fread. 1254 00:59:58,980 --> 01:00:00,700 Αλλά και πάλι, είδαμε, παίρνει ένα δείκτη. 1255 01:00:00,700 --> 01:00:02,560 Δεν χρειάζεται να περάσει αστέρι buffer. 1256 01:00:02,560 --> 01:00:05,350 Αυτό θα διέρχεται είναι ό, τι είναι εδώ. 1257 01:00:05,350 --> 01:00:07,980 Και αυτό θα μπορούσε πιθανότατα να μας δώσει ένα λάθος γιατί είμαστε το de-αναφορά. 1258 01:00:07,980 --> 01:00:08,150 >> Σωστά; 1259 01:00:08,150 --> 01:00:10,690 Όταν de-αναφορά σε αυτό το δείκτη, όταν προσπαθούμε να αποκτήσετε πρόσβαση σε αυτήν τη θέση, 1260 01:00:10,690 --> 01:00:13,140 παίρνουμε ένα λάθος - σφάλμα κατάτμησης μας. 1261 01:00:13,140 --> 01:00:15,800 Έτσι - 1262 01:00:15,800 --> 01:00:16,690 ουπς. 1263 01:00:16,690 --> 01:00:19,090 Εμείς πάμε για να βγείτε από το gdb. 1264 01:00:19,090 --> 01:00:20,160 Η γραμμή μας - 1265 01:00:20,160 --> 01:00:22,990 το πρόβλημά μας - είναι σωστό εδώ σε αυτή τη γραμμή. 1266 01:00:22,990 --> 01:00:26,410 Και αυτό είναι ένα πρόβλημα, διότι αυτής της γραμμής. 1267 01:00:26,410 --> 01:00:31,780 >> Πώς μπορούμε να δημιουργήσουμε ένα πλαίσιο που είναι προσβάσιμο σε fread. 1268 01:00:31,780 --> 01:00:31,980 Σωστά; 1269 01:00:31,980 --> 01:00:35,190 Πρέπει να δημιουργήσουμε ένα πλαίσιο που είναι ένα byte μεγάλο, το μέγεθος ενός χαρακτήρα. 1270 01:00:35,190 --> 01:00:38,590 Αλλά χρειαζόμαστε αυτό το πλαίσιο να είναι προσβάσιμο όταν αυτή η λειτουργία εκτελείται. 1271 01:00:38,590 --> 01:00:39,390 Έτσι, όταν - 1272 01:00:39,390 --> 01:00:39,640 ναι. 1273 01:00:39,640 --> 01:00:40,440 Οποιεσδήποτε ιδέες; 1274 01:00:40,440 --> 01:00:43,615 >> ΦΟΙΤΗΤΗΣ 60: Απλά ορίζεται ως οποιοδήποτε τυχαίο χαρακτήρα. 1275 01:00:43,615 --> 01:00:49,150 1276 01:00:49,150 --> 01:00:51,640 Απλά κάνουμε char ισούται ρυθμιστικού ο χαρακτήρας. 1277 01:00:51,640 --> 01:00:53,795 Και στη συνέχεια, όταν έχετε buffer εκεί - 1278 01:00:53,795 --> 01:00:54,110 >> JASON Hirschhorn: Περιμένετε. 1279 01:00:54,110 --> 01:00:55,110 Char buffer; 1280 01:00:55,110 --> 01:00:55,880 Έτσι, δεν έχει αστέρι; 1281 01:00:55,880 --> 01:00:56,390 >> ΦΟΙΤΗΤΗΣ 60: Ναι. 1282 01:00:56,390 --> 01:00:58,560 Βγάλτε το αστέρι. 1283 01:00:58,560 --> 01:01:00,690 Ισούται με ένα τυχαίο χαρακτήρα. 1284 01:01:00,690 --> 01:01:01,460 >> JASON Hirschhorn: OK. 1285 01:01:01,460 --> 01:01:02,420 Έτσι, να μου δώσει ένα. 1286 01:01:02,420 --> 01:01:03,170 >> ΦΟΙΤΗΤΗΣ 60: Like a ή κάτι τέτοιο. 1287 01:01:03,170 --> 01:01:06,160 Και στη συνέχεια, όταν έχετε buffer εκεί, μπορείτε να χρησιμοποιήσετε ένα - 1288 01:01:06,160 --> 01:01:06,420 >> ΦΟΙΤΗΤΗΣ 61: Star; 1289 01:01:06,420 --> 01:01:07,650 Ω, όχι, το εμπορικό. 1290 01:01:07,650 --> 01:01:09,000 >> ΦΟΙΤΗΤΗΣ 60: Χρησιμοποιήστε το σύμβολο. 1291 01:01:09,000 --> 01:01:09,470 >> JASON Hirschhorn: OK. 1292 01:01:09,470 --> 01:01:11,320 Και τι γίνεται με το fwrite; 1293 01:01:11,320 --> 01:01:14,150 >> ΦΟΙΤΗΤΗΣ 60: Χρησιμοποιήστε πάλι το εμπορικό. 1294 01:01:14,150 --> 01:01:14,320 >> JASON Hirschhorn: Εντάξει. 1295 01:01:14,320 --> 01:01:20,970 Έτσι, η ιδέα σας είναι, έχουμε δημιουργήσει μια χαρα και βάλει κάτι σε αυτό, και στη συνέχεια 1296 01:01:20,970 --> 01:01:22,612 εγγραφή σε αυτό το char. 1297 01:01:22,612 --> 01:01:23,760 >> ΦΟΙΤΗΤΗΣ 60: Ναι. 1298 01:01:23,760 --> 01:01:25,916 >> JASON Hirschhorn: Τι σκέφτονται οι άνθρωποι; 1299 01:01:25,916 --> 01:01:27,770 >> ΦΟΙΤΗΤΗΣ 62: Είναι μπερδεμένη. 1300 01:01:27,770 --> 01:01:28,460 >> JASON Hirschhorn: OK. 1301 01:01:28,460 --> 01:01:29,760 Ας το σύρει έξω. 1302 01:01:29,760 --> 01:01:35,720 Έτσι, αυτή τη φορά, Πάω να επιστήσω αυτό κόκκινο στη στοίβα εδώ, και τότε 1303 01:01:35,720 --> 01:01:36,410 θα έχει - 1304 01:01:36,410 --> 01:01:36,822 ooh! 1305 01:01:36,822 --> 01:01:38,060 Λυπάμαι. 1306 01:01:38,060 --> 01:01:45,930 Έτσι, αυτή τη φορά έχουμε κάτι που ονομάζεται buffer, και είναι στη στοίβα. 1307 01:01:45,930 --> 01:01:48,430 Διορθώστε; 1308 01:01:48,430 --> 01:01:51,520 Και σώζουμε σε αυτό το, αρχικά. 1309 01:01:51,520 --> 01:01:53,830 >> Στη συνέχεια έχουμε το αίτημά μας για fread. 1310 01:01:53,830 --> 01:02:01,300 Τι fread δεν είναι αυτό που παίρνει ένα byte από το αρχείο μας και βάζει κάπου. 1311 01:02:01,300 --> 01:02:04,570 Αυτό βάζει σε ό, τι το το πράγμα δείχνει να. 1312 01:02:04,570 --> 01:02:09,130 Λοιπόν, πριν είχαμε αυτή τη διεύθυνση - 1313 01:02:09,130 --> 01:02:10,250 0x0. 1314 01:02:10,250 --> 01:02:13,349 Τώρα τι διεύθυνση έχουμε; 1315 01:02:13,349 --> 01:02:14,650 >> ΦΟΙΤΗΤΗΣ 63: Ό, ρυθμιστικό διεύθυνση είναι. 1316 01:02:14,650 --> 01:02:15,970 >> JASON Hirschhorn: Ό, ρυθμιστικό διεύθυνση είναι. 1317 01:02:15,970 --> 01:02:22,370 Είναι πιθανότατα θα είναι κάτι τέτοιο. 1318 01:02:22,370 --> 01:02:26,950 Πιθανώς πρόκειται να ξεκινήσει με ένα b και ένα f, και στη συνέχεια να έχουν έξι άλλες 1319 01:02:26,950 --> 01:02:27,970 δεκαεξαδικά ψηφία. 1320 01:02:27,970 --> 01:02:28,480 Δεν πειράζει. 1321 01:02:28,480 --> 01:02:29,470 Κάποια διεύθυνση. 1322 01:02:29,470 --> 01:02:31,410 Και είμαστε περνώντας αυτή τη διεύθυνση μέσα 1323 01:02:31,410 --> 01:02:34,790 >> Και θα πάμε να θέσει ένα μας byte πράγμα σε αυτή τη διεύθυνση. 1324 01:02:34,790 --> 01:02:38,470 Έτσι θα πάμε για να βάλει ένα μας byte πράγμα εδώ μέσα. 1325 01:02:38,470 --> 01:02:40,800 Και μετά θα πάμε να γράψει από τι είναι ποτέ εδώ μέσα. 1326 01:02:40,800 --> 01:02:43,425 1327 01:02:43,425 --> 01:02:45,380 Μήπως κάποιος έχει απορίες γι 'αυτό; 1328 01:02:45,380 --> 01:02:50,990 1329 01:02:50,990 --> 01:02:54,690 Ποιος νομίζει ότι αυτός ο κώδικας θα λειτουργήσει; 1330 01:02:54,690 --> 01:02:56,020 >> Σηκώστε το χέρι σας αν νομίζετε ότι ο κωδικός αυτός θα λειτουργήσει. 1331 01:02:56,020 --> 01:02:57,270 Θα πρέπει να λάβει θέση. 1332 01:02:57,270 --> 01:03:00,670 1333 01:03:00,670 --> 01:03:02,500 Και ποιος πιστεύει ότι αυτός ο κώδικας δεν θα λειτουργήσει; 1334 01:03:02,500 --> 01:03:04,610 Σηκώστε το χέρι σας. 1335 01:03:04,610 --> 01:03:06,750 Όλοι οι υπόλοιποι θα πρέπει να είναι σηκώνοντας το χέρι τους. 1336 01:03:06,750 --> 01:03:07,670 OK. 1337 01:03:07,670 --> 01:03:09,390 Μάικλ, πού στέκεσαι; 1338 01:03:09,390 --> 01:03:10,680 >> MICHAEL: δεν μπορώ να αποφασίσω. 1339 01:03:10,680 --> 01:03:12,070 Είδος του στη μέση. 1340 01:03:12,070 --> 01:03:12,736 >> JASON Hirschhorn: Είσαι στη μέση. 1341 01:03:12,736 --> 01:03:13,092 Διαλέξτε ένα. 1342 01:03:13,092 --> 01:03:14,400 >> ΜΙΧΑΗΛ: Θα έχουμε πίστη και να πω ότι θα λειτουργήσει. 1343 01:03:14,400 --> 01:03:14,660 >> JASON Hirschhorn: OK. 1344 01:03:14,660 --> 01:03:16,047 Θα έχουν πίστη και να πω ότι δουλεύει; 1345 01:03:16,047 --> 01:03:26,490 1346 01:03:26,490 --> 01:03:27,020 Τι συνέβη; 1347 01:03:27,020 --> 01:03:28,270 >> [Παρεμβάλλοντας VOICES] 1348 01:03:28,270 --> 01:03:35,170 1349 01:03:35,170 --> 01:03:35,950 >> JASON Hirschhorn: Κανένα σφάλμα seg. 1350 01:03:35,950 --> 01:03:40,320 Πώς μπορούμε να ελέγξετε για να δείτε αν δύο πράγματα είναι ίσα; 1351 01:03:40,320 --> 01:03:42,060 Δύο αρχεία είναι ίσες. 1352 01:03:42,060 --> 01:03:43,300 >> ΦΟΙΤΗΤΗΣ 64: Diff. 1353 01:03:43,300 --> 01:03:45,490 >> JASON Hirschhorn: Diff. 1354 01:03:45,490 --> 01:03:51,630 Diff ελέγχους για τις διαφορές μεταξύ των δύο αρχεία, και αν επιστρέφει 1355 01:03:51,630 --> 01:03:52,890 τίποτα, είναι πανομοιότυπα. 1356 01:03:52,890 --> 01:03:59,030 Και αν ανοίξουμε, θα πάρετε το αρχείο μας. 1357 01:03:59,030 --> 01:04:00,490 Έτσι, αυτή ήταν η σωστή λύση. 1358 01:04:00,490 --> 01:04:01,780 Ας ρίξουμε μια ματιά πίσω σε αυτό για μια ακόμη φορά. 1359 01:04:01,780 --> 01:04:04,080 Εμείς πραγματικά δεν έκανε ακόμα πρέπει να το προετοιμάσει. 1360 01:04:04,080 --> 01:04:05,520 >> Θα ήταν ίσως δούμε λίγο καθαρότερο αν δεν έχετε βάλει 1361 01:04:05,520 --> 01:04:07,680 κάτι τυχαίο εκεί. 1362 01:04:07,680 --> 01:04:13,070 Το θέμα είναι, θα έπρεπε να δημιουργήσετε κάποιο χώρο για να αποθηκεύσετε κάτι από 1363 01:04:13,070 --> 01:04:15,530 fread και να λάβει κάτι από fwrite. 1364 01:04:15,530 --> 01:04:18,400 Και αυτό το πράγμα έπρεπε να είναι είτε μια τοπική μεταβλητή στη στοίβα - σας 1365 01:04:18,400 --> 01:04:19,890 θα μπορούσε να έχω malloc'd κάποιο διάστημα. 1366 01:04:19,890 --> 01:04:23,030 >> Γι 'αυτό και στην πραγματικότητα θα μπορούσε να έχει γραπτή malloc εδώ, και 1367 01:04:23,030 --> 01:04:25,420 που θα έχουν εργαστεί. 1368 01:04:25,420 --> 01:04:28,660 Και τότε θα έχουν την αποθήκευση πράγματα μας κάπου στο σωρό. 1369 01:04:28,660 --> 01:04:31,940 Αλλά αυτό είναι στην πραγματικότητα, κατά πάσα πιθανότητα, η πιο κομψή λύση. 1370 01:04:31,940 --> 01:04:34,490 Απλά δημιουργήστε χώρο στη στοίβα για αυτά τα πράγματα να πάνε. 1371 01:04:34,490 --> 01:04:37,690 1372 01:04:37,690 --> 01:04:38,990 >> Θα έχει άλλες δύο παρατηρήσεις. 1373 01:04:38,990 --> 01:04:44,650 Εάν επρόκειτο να λάβει σειρά του σε αυτό, και στη συνέχεια, να σκοράρει σε αυτό, οι παρατηρήσεις μου 1374 01:04:44,650 --> 01:04:47,400 θα είναι ως εξής. 1375 01:04:47,400 --> 01:04:54,300 Αυτά είναι 1 εδώ, για μένα, κοίτα σαν μαγικό αριθμό. 1376 01:04:54,300 --> 01:04:56,860 Αυτό το 1, από την άποψη της fread, νόημα. 1377 01:04:56,860 --> 01:04:59,580 Αυτός είναι ο αριθμός των πραγμάτων να διαβάσει ή να γράψει. 1378 01:04:59,580 --> 01:05:03,740 >> Αλλά αυτό εδώ θα πρέπει να ίσως να είναι κάτι άλλο. 1379 01:05:03,740 --> 01:05:05,180 Έτσι τι είναι μια λύση; 1380 01:05:05,180 --> 01:05:06,545 >> ΦΟΙΤΗΤΗΣ 65: Μέγεθος byte. 1381 01:05:06,545 --> 01:05:10,100 1382 01:05:10,100 --> 01:05:11,080 >> JASON Hirschhorn: Σας αρέσει αυτό; 1383 01:05:11,080 --> 01:05:13,130 >> ΦΟΙΤΗΤΗΣ 65: Μέγεθος της char. 1384 01:05:13,130 --> 01:05:13,820 >> JASON Hirschhorn: Μέγεθος char. 1385 01:05:13,820 --> 01:05:15,290 Ναι, byte δεν είναι ένας τύπος. 1386 01:05:15,290 --> 01:05:16,320 Έτσι, το μέγεθος των έργων char. 1387 01:05:16,320 --> 01:05:30,270 Θα μπορούσαμε να έχουμε, στην κορυφή του μας κώδικα, # ορίζεται ότι. 1388 01:05:30,270 --> 01:05:33,410 Ονομάζεται κάτι BYTE και Είναι πραγματικά μια χαρα. 1389 01:05:33,410 --> 01:05:37,675 Στην πραγματικότητα, μια ακόμη καλύτερη προσέγγιση θα μπορούσε να ήταν αυτό - 1390 01:05:37,675 --> 01:05:39,391 uint. 1391 01:05:39,391 --> 01:05:40,780 Ξέρει κανείς τι είναι αυτό; 1392 01:05:40,780 --> 01:05:44,388 1393 01:05:44,388 --> 01:05:44,840 >> Λυπάμαι. 1394 01:05:44,840 --> 01:05:46,090 Έχω πίσω. 1395 01:05:46,090 --> 01:05:51,620 1396 01:05:51,620 --> 01:05:52,200 Περιμένετε, όχι. 1397 01:05:52,200 --> 01:05:53,450 Ποιο περίπτωση δεν πάει; 1398 01:05:53,450 --> 01:05:58,071 1399 01:05:58,071 --> 01:05:59,660 Ξέρει κανείς τι είναι αυτό; 1400 01:05:59,660 --> 01:06:00,950 Ναι. 1401 01:06:00,950 --> 01:06:05,650 >> ΦΟΙΤΗΤΗΣ 67: υποτίθεται για να βοηθήσει την τυποποίηση όλη πράγματα συστημάτων που 1402 01:06:05,650 --> 01:06:08,760 έχουν - όπως ανυπόγραφα ακέραιοι που έχουν 8 bytes; 1403 01:06:08,760 --> 01:06:11,785 >> JASON Hirschhorn: Αυτό είναι ακριβώς δεξιά. 1404 01:06:11,785 --> 01:06:14,310 Σε διαφορετικά μηχανήματα, το μέγεθος ενός χαρακτήρα - 1405 01:06:14,310 --> 01:06:15,180 δεν είναι συνήθως μια χαρα. 1406 01:06:15,180 --> 01:06:16,100 Χαρακτήρες είναι συνήθως ένα byte. 1407 01:06:16,100 --> 01:06:19,590 Αλλά το μέγεθος των άλλων τύπων δεδομένων είναι διαφορετικά μεγέθη σε μία μηχανή 32-bit 1408 01:06:19,590 --> 01:06:21,370 έναντι μιας μηχανής 64-bit. 1409 01:06:21,370 --> 01:06:25,180 Μια uint8_t είναι πάντα 8 bits - 1410 01:06:25,180 --> 01:06:27,210 πάντα ένα byte. 1411 01:06:27,210 --> 01:06:29,580 >> Και εγώ πρέπει να περιλαμβάνουν την εν λόγω πρότυπο αρχείο κεφαλίδας int. 1412 01:06:29,580 --> 01:06:35,040 Μέχρι τώρα, αυτό θα ήταν πιθανώς ο καλύτερος τρόπος για να γράψω αυτό το κώδικα. 1413 01:06:35,040 --> 01:06:40,160 1414 01:06:40,160 --> 01:06:41,450 Έτσι, μπορώ να απαλλαγώ από τα μαγικά τους αριθμούς. 1415 01:06:41,450 --> 01:06:44,690 Και έχω και μια πιο λογική πληκτρολογήστε του buffer. 1416 01:06:44,690 --> 01:06:49,450 Δεν είναι απλώς ένα char, είναι ένα byte, που είναι αυτό που περιμένουμε να είναι. 1417 01:06:49,450 --> 01:06:53,400 >> Και εδώ, έχουμε πραγματικά ήταν λίγο πιο ισχυρή. 1418 01:06:53,400 --> 01:06:55,190 Εμείς δεν το αποκαλεί χαρακτηριστικά, τα οποία - 1419 01:06:55,190 --> 01:06:58,630 ίσως, ο οποίος γνωρίζει - θα μπορούσε να είναι ένα διαφορετικό μέγεθος σε διαφορετικά μηχανήματα. 1420 01:06:58,630 --> 01:07:02,025 Είμαστε πραγματικά λέγοντας ότι αυτό είναι ακριβώς ένα byte, πάντα, δεν το θέμα αυτό. 1421 01:07:02,025 --> 01:07:05,810 Και αν κοιτάξουμε εδώ, κάνουμε cp. 1422 01:07:05,810 --> 01:07:08,340 Uh-oh. 1423 01:07:08,340 --> 01:07:09,590 Τι συνέβη; 1424 01:07:09,590 --> 01:07:14,470 1425 01:07:14,470 --> 01:07:16,170 >> ΦΟΙΤΗΤΗΣ 68: Θα μπορούσε να αλλάξει. 1426 01:07:16,170 --> 01:07:17,880 >> JASON Hirschhorn: Τι; 1427 01:07:17,880 --> 01:07:19,130 >> ΦΟΙΤΗΤΗΣ 69: Είναι αυτό; 1428 01:07:19,130 --> 01:07:21,940 1429 01:07:21,940 --> 01:07:25,080 >> ΦΟΙΤΗΤΗΣ 70: Δεν το έκανες ορίζουν ως ένα είδος. 1430 01:07:25,080 --> 01:07:28,684 >> ΦΟΙΤΗΤΗΣ 71: Αλλά θα πρέπει να να ορίζεται στο πρότυπο. 1431 01:07:28,684 --> 01:07:29,934 >> ΦΟΙΤΗΤΗΣ 72: Τι συμβαίνει; 1432 01:07:29,934 --> 01:07:37,660 1433 01:07:37,660 --> 01:07:40,210 >> ΦΟΙΤΗΤΗΣ 73: Πρέπει να καθορίζει το είναι όλα τα καπάκια; 1434 01:07:40,210 --> 01:07:41,370 >> JASON Hirschhorn: Έτσι δεν είναι # define. 1435 01:07:41,370 --> 01:07:45,490 Στην πραγματικότητα, σε αυτή την περίπτωση, είμαι πρόκειται να χρησιμοποιήσετε typedef. 1436 01:07:45,490 --> 01:07:48,590 Επειδή είμαστε χρησιμοποιώντας ως ένας τύπος σε μία θέση. 1437 01:07:48,590 --> 01:07:51,990 Έτσι, στην περίπτωση αυτή, θέλουμε πραγματικά να typedef σαν να εκτυπώνετε ένα νέο τύπο 1438 01:07:51,990 --> 01:07:54,490 byte, και είναι, κατ 'ουσίαν, αυτό. 1439 01:07:54,490 --> 01:07:56,590 Είναι λίγο διαφορετικό από ό, τι # define. 1440 01:07:56,590 --> 01:08:02,740 >> Και τώρα, ο κώδικας μας δουλεύει τέλεια. 1441 01:08:02,740 --> 01:08:05,230 Έτσι, και πάλι, # define παίρνει κάτι, αντικαθιστά παντού 1442 01:08:05,230 --> 01:08:06,780 με το άλλο πράγμα. 1443 01:08:06,780 --> 01:08:07,920 Είναι απλά μια μακρο - 1444 01:08:07,920 --> 01:08:09,420 στενογραφία για να απαλλαγούμε από μαγικοί αριθμοί. 1445 01:08:09,420 --> 01:08:11,360 Αλλά στην περίπτωση αυτή, επειδή είμαστε χρησιμοποιώντας το ως ένα είδος - 1446 01:08:11,360 --> 01:08:12,180 εδώ - 1447 01:08:12,180 --> 01:08:19,880 προκειμένου αυτό να λειτουργεί, χρειαζόμαστε να typedef ό, τι είναι byte. 1448 01:08:19,880 --> 01:08:21,840 >> Και είμαστε το καθορίζουν εδώ. 1449 01:08:21,840 --> 01:08:24,750 Δεν είναι ένα struct, στην πραγματικότητα μόνο ένα ανυπόγραφο ακέραιος. 1450 01:08:24,750 --> 01:08:27,680 Είναι μακρύς ο δρόμος byte. 1451 01:08:27,680 --> 01:08:31,910 Ο κωδικός αυτός θα είναι διαθέσιμα στο διαδίκτυο, και όλοι πρέπει να έχουν το δικαίωμα τώρα. 1452 01:08:31,910 --> 01:08:33,830 >> Έτσι έχουμε - 1453 01:08:33,830 --> 01:08:34,250 perfect - 1454 01:08:34,250 --> 01:08:41,359 13 λεπτά για να πάει αριστερά πάνω από το πρόβλημα που 5. 1455 01:08:41,359 --> 01:08:44,270 Θέλω να περπατήσω μέσα copy.c μαζί, και στη συνέχεια θα μιλήσω εν συντομία 1456 01:08:44,270 --> 01:08:47,120 για τα άλλα μέρη του προβλήματος που. 1457 01:08:47,120 --> 01:08:48,899 Επιτρέψτε μου λοιπόν να σηκώσει copy.c. 1458 01:08:48,899 --> 01:09:03,930 1459 01:09:03,930 --> 01:09:08,810 Και το δροσερό πράγμα είναι, έχουμε στην πραγματικότητα ήδη γράψει πολλά αυτού του κώδικα. 1460 01:09:08,810 --> 01:09:11,180 >> Ο κώδικας γράψαμε κυριολεκτικά βγήκε από εδώ όταν ήμουν 1461 01:09:11,180 --> 01:09:13,120 γράφοντας αυτό για τη δική μου. 1462 01:09:13,120 --> 01:09:16,990 Αλλά αυτό είναι copy.c, αποτελεί το θεμέλιο για τα δύο πρώτα τμήματα της 1463 01:09:16,990 --> 01:09:22,340 το πρόβλημα που για whodunit.c, η οποία θα πρέπει να γράψετε και resize.c. 1464 01:09:22,340 --> 01:09:27,050 Recover.c, το οποίο είναι το τρίτο και τελευταίο μέρος του συνόλου του προβλήματος, δεν είναι 1465 01:09:27,050 --> 01:09:29,529 βασίζεται στα ανοικτά αυτού του αρχείου. 1466 01:09:29,529 --> 01:09:32,200 >> Θα πάμε να πρέπει να γράψω αυτό το αρχείο, σας δίνουμε ένα πρότυπο γι 'αυτό 1467 01:09:32,200 --> 01:09:34,620 αρχείο, αλλά δεν έχει καμία να κάνει με copy.c. 1468 01:09:34,620 --> 01:09:38,675 Αλλά επειδή copy.c είναι το θεμέλιο για τα δύο πρώτα σκέλη, θα πάμε 1469 01:09:38,675 --> 01:09:42,000 να περπατήσει μέσα από αυτό τώρα, έτσι ώστε να έχουν μια καλή αίσθηση του τι κάνει. 1470 01:09:42,000 --> 01:09:43,640 >> Και οι παρατηρήσεις δίνουν μερικά από μακριά. 1471 01:09:43,640 --> 01:09:45,120 Έχουμε ήδη γράψει μερικά από αυτό. 1472 01:09:45,120 --> 01:09:49,220 Πρώτον, είμαστε φροντίζοντας έχουμε τρία επιχειρήματα. 1473 01:09:49,220 --> 01:09:50,560 Στη συνέχεια, εμείς θυμόμαστε το όνομα του αρχείου. 1474 01:09:50,560 --> 01:09:52,960 Γι 'αυτό παραληφθεί αυτό το βήμα, όταν που κωδικοποιούνται πράγμα μας - 1475 01:09:52,960 --> 01:09:54,700 όταν cp μας. 1476 01:09:54,700 --> 01:09:56,750 Αλλά εδώ, κάνουν είναι λίγο καθαρότερο. 1477 01:09:56,750 --> 01:09:59,350 >> Είναι έλεγχο για να βεβαιωθείτε και τα δύο αρχεία είναι καλές, σε 1478 01:09:59,350 --> 01:10:00,450 Εκτός από το άνοιγμα τους. 1479 01:10:00,450 --> 01:10:04,760 Γράψαμε όλοι αυτόν τον κώδικα μόλις τώρα, οπότε είμαι δεν πρόκειται να σταθώ σε αυτόν τον κώδικα. 1480 01:10:04,760 --> 01:10:09,670 Επόμενο είναι μερικά πράγματα που είναι ειδικά για τους τύπους των αρχείων που χρησιμοποιούμε, η οποία 1481 01:10:09,670 --> 01:10:12,240 είναι αρχεία bitmap. 1482 01:10:12,240 --> 01:10:15,660 Bitmap αρχεία έχουν κάποια μεταδεδομένα συνδέονται με αυτά. 1483 01:10:15,660 --> 01:10:20,190 >> Έτσι, το πρώτο ζευγάρι των bytes να σας πω σχετικά με το αρχείο. 1484 01:10:20,190 --> 01:10:23,460 Δεν είναι τα χρώματα της το pixel στην εικόνα αυτή. 1485 01:10:23,460 --> 01:10:25,120 Θα σας πω σχετικά με το αρχείο. 1486 01:10:25,120 --> 01:10:28,220 Και αν διαβάσετε μέσα από το σύνολο του προβλήματος, θα έχετε πολύ περισσότερες πληροφορίες 1487 01:10:28,220 --> 01:10:33,100 σχετικά με το τι τύποι των δομών μεταδεδομένων περιλαμβάνονται με bitmap. 1488 01:10:33,100 --> 01:10:39,350 >> Αλλά γι 'αυτό έχουμε αυτό το πρώτο σύνολο - στον κωδικό αυτό εδώ. 1489 01:10:39,350 --> 01:10:42,490 Μας διαβάζουν τα μεταδεδομένα - 1490 01:10:42,490 --> 01:10:45,800 δύο κομμάτια των μεταδεδομένων - το αρχείο επικεφαλίδας και των πληροφοριών κεφαλίδας. 1491 01:10:45,800 --> 01:10:51,030 Και είμαστε ελέγχει κάποια τμήματά του να βεβαιωθείτε ότι είναι ένα πραγματικό αρχείο bitmap 1492 01:10:51,030 --> 01:10:52,420 πριν συνεχίσετε. 1493 01:10:52,420 --> 01:10:55,470 >> Και πάλι, αυτά είναι τα στοιχεία που Δεν χρειάζεται να πάει στο τώρα. 1494 01:10:55,470 --> 01:10:57,720 Αν διαβάσετε το σύνολο του προβλήματος, θα καταλάβετε αυτά. 1495 01:10:57,720 --> 01:11:01,370 Μεγάλη ιστορία σύντομη, αυτά είναι απλά λέγοντας, αυτό είναι ένα αρχείο bitmap, και 1496 01:11:01,370 --> 01:11:02,810 επιβεβαιώνοντας ότι. 1497 01:11:02,810 --> 01:11:05,180 >> Στη συνέχεια, γράφουμε εκείνων στο αρχείο έξω. 1498 01:11:05,180 --> 01:11:05,660 Βλέπουμε ότι εδώ. 1499 01:11:05,660 --> 01:11:06,910 Σας γράφουμε για το δείκτη έξω. 1500 01:11:06,910 --> 01:11:09,260 1501 01:11:09,260 --> 01:11:11,320 Στη συνέχεια, είμαστε καθορισμό padding. 1502 01:11:11,320 --> 01:11:15,240 Έτσι και πάλι, όπως είναι με ιδιαιτερότητα ένα αρχείο bitmap, μερικές γραμμές περιλαμβάνουν 1503 01:11:15,240 --> 01:11:16,840 παραγεμίσματος στο τέλος. 1504 01:11:16,840 --> 01:11:19,000 Και αν διαβάσετε μέσα από το σύνολο του προβλήματος, θα μάθετε περισσότερα για το παραγέμισμα. 1505 01:11:19,000 --> 01:11:22,330 Αυτή είναι η συνταγή για να βρείτε το υλικό παραγεμίσματος. 1506 01:11:22,330 --> 01:11:23,610 >> Είναι σημαντικό να θυμόμαστε - 1507 01:11:23,610 --> 01:11:29,720 όταν αλλάζετε το μέγεθος του bitmap αρχείο, οι αλλαγές padding. 1508 01:11:29,720 --> 01:11:31,970 Όταν αλλάζετε το μέγεθος ενός αρχείο, οι αλλαγές padding. 1509 01:11:31,970 --> 01:11:34,310 Ποτέ δεν πρόκειται να είναι μεγαλύτερο από 3 - 1510 01:11:34,310 --> 01:11:36,510 θα είναι από 0 έως 3, χωρίς αποκλεισμούς. 1511 01:11:36,510 --> 01:11:38,930 Αλλά όταν αλλάζετε το μέγεθος του κάτι, οι αλλαγές padding. 1512 01:11:38,930 --> 01:11:47,100 >> Αν έχω μόνο ένα εικονοστοιχείο σε αυτή την σειρά, I χρειάζονται τρία bytes γεμίσει, επειδή 1513 01:11:47,100 --> 01:11:51,190 κάθε σειρά πρέπει να είναι πολλαπλάσια του τέσσερα bytes καιρό σε ένα αρχείο bitmap. 1514 01:11:51,190 --> 01:11:56,120 Αλλά αν μπορώ να διπλασιαστεί, για να πάει από το ένα pixel σε δύο pixel, καθένα από τα οποία, 1515 01:11:56,120 --> 01:11:59,510 ας πούμε, είναι ένα byte, τότε θα πρέπει δύο bytes του padding για να κάνουν 1516 01:11:59,510 --> 01:12:00,970 που ισούται με τέσσερα. 1517 01:12:00,970 --> 01:12:04,200 >> Έτσι, όταν μπορώ να αλλάξω το μέγεθος του κάτι, Πρέπει να αλλάξω το ποσό 1518 01:12:04,200 --> 01:12:06,551 παραγέμισμα έχω. 1519 01:12:06,551 --> 01:12:08,100 Μήπως αυτό έχει νόημα για όλους; 1520 01:12:08,100 --> 01:12:12,020 1521 01:12:12,020 --> 01:12:18,720 Στη συνέχεια, μετακινηθείτε πάνω από κάθε σειρά, ή μέσα από όλες τις σειρές. 1522 01:12:18,720 --> 01:12:21,400 Και τότε θα επαναλάβει μέσω κάθε στήλη σε κάθε σειρά. 1523 01:12:21,400 --> 01:12:25,330 Είμαστε θεραπεία αυτού του bitmap, όπως ένα πλέγμα, όπως έχουμε περιθάλψει 1524 01:12:25,330 --> 01:12:26,490 το διοικητικό συμβούλιο σε 15. 1525 01:12:26,490 --> 01:12:29,200 >> Όπως θα αντιμετωπίζονται τα τούβλα όταν εμείς τους τυπωμένο στην οθόνη. 1526 01:12:29,200 --> 01:12:31,350 Ένα πλέγμα σειρών και στηλών. 1527 01:12:31,350 --> 01:12:32,350 Στη συνέχεια - το είδαμε αυτό. 1528 01:12:32,350 --> 01:12:33,840 Στην πραγματικότητα μόνο κωδικοποιημένα αυτό. 1529 01:12:33,840 --> 01:12:35,780 Δημιουργήσαμε κάποια προσωρινή αποθήκευση. 1530 01:12:35,780 --> 01:12:38,710 Διαβάζουμε εκεί, και στη συνέχεια θα το γράψει. 1531 01:12:38,710 --> 01:12:42,680 Αυτό είναι ακριβώς αυτό που μόλις έκανε. 1532 01:12:42,680 --> 01:12:46,760 >> Στη συνέχεια, επειδή είπα κάθε γραμμή καταλήγει σε κάποιο padding, εμείς 1533 01:12:46,760 --> 01:12:48,260 υπερπηδήσει αυτό το υλικό παραγεμίσματος - 1534 01:12:48,260 --> 01:12:51,000 το παλιό padding. 1535 01:12:51,000 --> 01:12:52,630 Και τότε μπορούμε να το προσθέσετε ξανά. 1536 01:12:52,630 --> 01:12:55,140 Σε αυτή την περίπτωση, δημιουργούμε ακριβώς το ίδιο αρχείο. 1537 01:12:55,140 --> 01:12:56,180 Είμαστε απλά αντιγραφή. 1538 01:12:56,180 --> 01:12:57,700 Έτσι, αυτή η γραμμή είναι χαζό. 1539 01:12:57,700 --> 01:12:59,660 Θα μπορούσαμε κυριολεκτικά τη βάτα μέσα 1540 01:12:59,660 --> 01:13:04,290 >> Αλλά αν αλλάξετε το μέγεθος του αρχείου, Δεν θέλετε ακόμα αυτή τη γραμμή; 1541 01:13:04,290 --> 01:13:08,510 1542 01:13:08,510 --> 01:13:11,560 Έτσι, αν αλλάξετε το μέγεθος ενός αρχείου, Δεν θέλουμε ακόμα να παρακάμψετε 1543 01:13:11,560 --> 01:13:12,810 πάνω από το παλιό υπόστρωμα; 1544 01:13:12,810 --> 01:13:15,170 1545 01:13:15,170 --> 01:13:15,970 >> ΦΟΙΤΗΤΗΣ 74: Ναι. 1546 01:13:15,970 --> 01:13:17,090 >> JASON Hirschhorn: Έτσι το κάνουμε. 1547 01:13:17,090 --> 01:13:19,290 Επειδή αυτό, πάλι, προσφορές με το αρχείο προέλευσης. 1548 01:13:19,290 --> 01:13:21,570 Δεν νοιάζονται για το παραγέμισμα από το αρχείο προέλευσης. 1549 01:13:21,570 --> 01:13:23,410 Θέλουμε να πάμε στην επόμενη γραμμή. 1550 01:13:23,410 --> 01:13:28,850 Αλλά δεν μπορούμε να το θέσουμε απλά πίσω το παλιό ποσό των padding. 1551 01:13:28,850 --> 01:13:31,540 Πρέπει να θέσουν εκ νέου το νέο ποσό του padding. 1552 01:13:31,540 --> 01:13:35,810 >> Έτσι, όταν αλλάζουμε το μέγεθος ενός αρχείο, εξακολουθούμε να θέλουμε να πηδήσει πάνω από το 1553 01:13:35,810 --> 01:13:38,270 padding στο παλιό αρχείο - τι είμαστε ανάγνωση από. 1554 01:13:38,270 --> 01:13:40,370 Αλλά αυτό που γράφουμε για να, θα πάμε να πρέπει να τεθεί και πάλι κάποια διαφορετική 1555 01:13:40,370 --> 01:13:41,890 αριθμός padding που έχουμε καθορίσει. 1556 01:13:41,890 --> 01:13:42,780 Ναι. 1557 01:13:42,780 --> 01:13:44,550 >> ΦΟΙΤΗΤΗΣ 75: Η σειρά των δύο αυτών γραμμές δεν έχει σημασία, έτσι δεν είναι; 1558 01:13:44,550 --> 01:13:46,160 Επειδή είστε το χειρισμό διαφορετικά αρχεία. 1559 01:13:46,160 --> 01:13:46,620 >> JASON Hirschhorn: Ακριβώς. 1560 01:13:46,620 --> 01:13:48,220 Η σειρά αυτών των δύο γραμμών Δεν έχει σημασία. 1561 01:13:48,220 --> 01:13:49,790 Σας γράφω αυτή τη γραμμή. 1562 01:13:49,790 --> 01:13:51,430 Αυτό είναι εδώ για το αρχείο γράφουμε για. 1563 01:13:51,430 --> 01:13:54,370 Αυτό είναι σημαντικό, έτσι ώστε να πάρει το σωστή ποσότητα του padding. 1564 01:13:54,370 --> 01:13:57,560 Αυτό έχει να ασχοληθεί με το αρχείο σε μορφή. 1565 01:13:57,560 --> 01:13:58,560 Θέλουμε να παρακάμψετε δεξιά πάνω από το παραγέμισμα. 1566 01:13:58,560 --> 01:13:59,470 >> Δεν θέλουμε να διαβάσει - 1567 01:13:59,470 --> 01:14:01,500 αν διαβάζετε ένα byte σε μια στιγμή, έχουμε δεν νοιάζονται για αυτά τα bytes padding. 1568 01:14:01,500 --> 01:14:04,070 Θέλουμε να προχωρήσουμε στην επόμενη γραμμή. 1569 01:14:04,070 --> 01:14:11,800 Τέλος, ακριβώς όπως Lucy έδωσε για μας, κλείνουμε τα αρχεία και να επιστρέψετε 0. 1570 01:14:11,800 --> 01:14:13,890 Έτσι, αυτό είναι copy.c. 1571 01:14:13,890 --> 01:14:17,850 Και στην πραγματικότητα έγραψε - θα περάσει το μεγαλύτερο μέρος της τμήμα το γράψιμο αυτού, κατ 'ουσίαν. 1572 01:14:17,850 --> 01:14:18,740 >> Κάνατε αυτό. 1573 01:14:18,740 --> 01:14:22,440 Έτσι, ελπίζουμε ότι έχετε μια καλή αίσθηση του τι συμβαίνει εδώ. 1574 01:14:22,440 --> 01:14:25,890 Η μεγάλη διαφορά, ειλικρινά, είναι ακριβώς αυτό το πρώτο μέρος που ασχολείται με 1575 01:14:25,890 --> 01:14:29,970 ιδιαιτερότητες των αρχείων bitmap. 1576 01:14:29,970 --> 01:14:33,570 Γι 'αυτό και έχουν ως επόμενη διαφάνεια μου, τι πρέπει να κάνουμε; 1577 01:14:33,570 --> 01:14:35,510 Λοιπόν, ας σκεφτούμε αστυνομικό θεατρικό έργο. 1578 01:14:35,510 --> 01:14:38,080 >> Και για κάποιον που διαβάζουν μέσω το πρόβλημα που, ό, τι κάνουμε εμείς 1579 01:14:38,080 --> 01:14:41,410 πρέπει να κάνουμε σε αστυνομικό θεατρικό έργο; 1580 01:14:41,410 --> 01:14:42,080 Απλά. 1581 01:14:42,080 --> 01:14:42,460 Aleja. 1582 01:14:42,460 --> 01:14:48,570 >> ALEJA: Μπορείς να πάρουν το μέρος κάθε πίξελ που υποδηλώνει κόκκινο. 1583 01:14:48,570 --> 01:14:49,730 Και στη συνέχεια - 1584 01:14:49,730 --> 01:14:50,730 το είδος του; 1585 01:14:50,730 --> 01:14:51,860 >> JASON Hirschhorn: OK. 1586 01:14:51,860 --> 01:14:54,460 Πάρτε λοιπόν το μέρος του κάθε pixel που υποδηλώνει κόκκινο. 1587 01:14:54,460 --> 01:14:57,234 Που είναι κοντά, αλλά όχι όλα. 1588 01:14:57,234 --> 01:14:59,780 >> ΦΟΙΤΗΤΗΣ 76: Λοιπόν, υπάρχει διαφορετικούς τρόπους για να το κάνει. 1589 01:14:59,780 --> 01:14:59,870 >> JASON Hirschhorn: OK. 1590 01:14:59,870 --> 01:15:03,070 Δώσε μου ένα τρόπο. 1591 01:15:03,070 --> 01:15:08,240 >> ΦΟΙΤΗΤΗΣ 76: Βγάλτε όλα τα κόκκινα, και Στη συνέχεια τονίζουν το μπλε και το πράσινο. 1592 01:15:08,240 --> 01:15:10,010 >> JASON Hirschhorn: OK. 1593 01:15:10,010 --> 01:15:11,830 Έτσι, δίνεται τόσο αυτοί οι τρόποι - 1594 01:15:11,830 --> 01:15:15,210 ακούγεται σαν δίνουμε ένα pixel, το έχει ένα κόκκινο, μπλε και πράσινο επίπεδο. 1595 01:15:15,210 --> 01:15:19,350 Θέλουμε να αλλάξουμε τα σχετικά επίπεδα των το κόκκινο, μπλε και πράσινο, ανάλογα με 1596 01:15:19,350 --> 01:15:20,740 σχετικά με αυτό το εικονοστοιχείο. 1597 01:15:20,740 --> 01:15:28,380 Όπου στον παρόντα κώδικα πρέπει να αλλάξουμε η σχετική κόκκινο, μπλε και πράσινο 1598 01:15:28,380 --> 01:15:29,720 επίπεδα ενός συγκεκριμένου εικονοστοιχείου. 1599 01:15:29,720 --> 01:15:30,600 Αφού έχουμε διαβάσει - 1600 01:15:30,600 --> 01:15:32,520 πριν το γράψεις; 1601 01:15:32,520 --> 01:15:34,564 Δώσε μου τον αριθμό γραμμής. 1602 01:15:34,564 --> 01:15:35,950 >> ΠΟΛΛΑΠΛΕΣ ΦΟΙΤΗΤΕΣ: 83. 1603 01:15:35,950 --> 01:15:37,320 >> JASON Hirschhorn: 83. 1604 01:15:37,320 --> 01:15:38,570 Έτσι, εδώ. 1605 01:15:38,570 --> 01:15:40,830 1606 01:15:40,830 --> 01:15:45,710 Για whodunit, ο κώδικας θα πρέπει να εγγραφής πρέπει να πάμε όλοι εκεί. 1607 01:15:45,710 --> 01:15:47,640 Και αυτός είναι ο μόνος κωδικός θα πρέπει να γράψετε. 1608 01:15:47,640 --> 01:15:51,520 Διότι, όπως ακούσαμε, όλα όσα χρειάζεται να κάνετε είναι να αλλάξετε αυτά σε σχέση με το μπλε, 1609 01:15:51,520 --> 01:15:54,420 κόκκινο, πράσινο και επίπεδα από κάθε πίξελ. 1610 01:15:54,420 --> 01:15:58,250 >> Έχετε διαβάσει το, και τώρα είστε πρόκειται να το γράψω. 1611 01:15:58,250 --> 01:16:03,100 Πώς μπορώ να πάρω - αν έχω αυτό το πράγμα το τριπλό, ακριβώς εδώ, και είναι της 1612 01:16:03,100 --> 01:16:04,570 πληκτρολογήστε RGBTRIPLE - 1613 01:16:04,570 --> 01:16:08,650 καλά, αν ψάξαμε στο bmp.h, τι είναι RGBTRIPLE; 1614 01:16:08,650 --> 01:16:11,450 1615 01:16:11,450 --> 01:16:12,700 >> ΦΟΙΤΗΤΗΣ 77: Είναι ένα struct. 1616 01:16:12,700 --> 01:16:17,440 1617 01:16:17,440 --> 01:16:18,900 >> JASON Hirschhorn: RGBTRIPLE είναι ένα struct. 1618 01:16:18,900 --> 01:16:22,330 Βλέπουμε ότι το δικαίωμα εδώ κάτω. 1619 01:16:22,330 --> 01:16:26,600 Και έτσι, αν ήθελα να έχουν πρόσβαση, για παράδειγμα, η κόκκινο επίπεδο του struct, πώς μπορώ να κάνω 1620 01:16:26,600 --> 01:16:30,005 πρόσβαση στο κόκκινο επίπεδο αυτού του struct; 1621 01:16:30,005 --> 01:16:37,280 >> [CLASS Ψίθυροι] 1622 01:16:37,280 --> 01:16:38,530 >> ΦΟΙΤΗΤΗΣ 78: RGBTRIPLE.rgbtred; 1623 01:16:38,530 --> 01:16:47,250 1624 01:16:47,250 --> 01:16:48,856 >> JASON Hirschhorn: Είναι αυτό σωστό; 1625 01:16:48,856 --> 01:16:53,040 >> ΦΟΙΤΗΤΗΣ 79: Θα πρέπει να είναι τριπλή dot, αντί RGBTRIPLE dot; 1626 01:16:53,040 --> 01:16:54,120 >> JASON Hirschhorn: Triple. 1627 01:16:54,120 --> 01:16:56,700 Τριπλό είναι η τοπική μεταβλητή, έτσι εδώ, δεν υπάρχει καμία δείκτες εδώ. 1628 01:16:56,700 --> 01:16:58,400 Γι 'αυτό και απλά χρησιμοποιήστε το συμβολισμό με την τελεία. 1629 01:16:58,400 --> 01:17:00,480 Αυτό θα μου δώσει το επίπεδο του κόκκινου. 1630 01:17:00,480 --> 01:17:06,180 Αν θέλω να το αλλάξω, μπορώ μόνο που είναι ίσο με κάτι διαφορετικό. 1631 01:17:06,180 --> 01:17:13,190 Έτσι και πάλι, αυτή τη γραμμή κώδικα προσβάσεις αυτή η μεταβλητή μέσα σε αυτό το struct, και 1632 01:17:13,190 --> 01:17:15,070 μπορούμε να το ρυθμίσετε σε κάτι νέο. 1633 01:17:15,070 --> 01:17:20,040 >> Έτσι, για whodunit, πάλι, αυτό είναι, στην ουσία, αυτό που πρέπει να κάνουμε. 1634 01:17:20,040 --> 01:17:21,170 Πολύ απλό. 1635 01:17:21,170 --> 01:17:25,020 Απλά αλλάξτε κάποια σχετική επίπεδα, και αυτό είναι όπου ο κώδικας αυτός πηγαίνει. 1636 01:17:25,020 --> 01:17:27,720 Αλλαγή μεγέθους, από την άλλη πλευρά, είναι λίγο πιο περίπλοκη. 1637 01:17:27,720 --> 01:17:30,900 Στην πραγματικότητα, αλλαγή μεγέθους είναι ίσως η δυσκολότερο μέρος του προβλήματος αυτού που. 1638 01:17:30,900 --> 01:17:32,720 Έχουμε τρία λεπτά για να πάει πέρα ​​από αυτό. 1639 01:17:32,720 --> 01:17:34,910 >> Αλλά και πάλι, έχουμε ήδη γράψει μεγαλύτερο μέρος αυτού του κώδικα, έτσι ώστε να 1640 01:17:34,910 --> 01:17:36,500 θα πρέπει να είναι αρκετά εξοικειωμένοι. 1641 01:17:36,500 --> 01:17:40,750 Ποια είναι μερικά πράγματα που θέλουμε να κάνουμε σε αλλάξετε το μέγεθος, αν έχετε διαβάσει πάνω από το 1642 01:17:40,750 --> 01:17:43,470 που το πρόβλημα; 1643 01:17:43,470 --> 01:17:45,290 Αν τους δώσει σε μένα, θα να μιλήσουμε γι 'αυτούς. 1644 01:17:45,290 --> 01:17:47,340 Ποια είναι μερικά πράγματα που θέλουμε να κάνουμε; 1645 01:17:47,340 --> 01:17:47,970 >> ΦΟΙΤΗΤΗΣ 80: Κάθετα - 1646 01:17:47,970 --> 01:17:52,360 έτσι θα πρέπει να αλλάξετε το μέγεθός του οριζόντια, αλλά κάθετα αλλάξετε το μέγεθός του, καθώς; 1647 01:17:52,360 --> 01:17:58,475 >> JASON Hirschhorn: Έτσι, αν είμαστε δοθεί pixel, και θέλουμε να αλλάξετε το μέγεθός του με ένα 1648 01:17:58,475 --> 01:18:03,460 παράγοντα δύο, θα πρέπει τώρα να αλλαγή μεγέθους οριζόντια και το μέγεθός της 1649 01:18:03,460 --> 01:18:05,220 κατακόρυφα. 1650 01:18:05,220 --> 01:18:06,640 Μήπως αυτό έχει νόημα; 1651 01:18:06,640 --> 01:18:07,060 Ναι. 1652 01:18:07,060 --> 01:18:09,300 Έτσι, αυτό είναι ίσως το μεγαλύτερη πρόκληση. 1653 01:18:09,300 --> 01:18:10,430 Και εμείς θα μιλήσουμε για αυτό σε ένα λεπτό. 1654 01:18:10,430 --> 01:18:11,065 Ναι. 1655 01:18:11,065 --> 01:18:15,270 >> ΦΟΙΤΗΤΗΣ 81: Ο τρόπος που το σκέφτηκα που σου χρειάζεται εκτύπωσης έξω - 1656 01:18:15,270 --> 01:18:15,490 >> JASON Hirschhorn: Περιμένετε. 1657 01:18:15,490 --> 01:18:17,580 Μην μας πείτε τι κάνατε. 1658 01:18:17,580 --> 01:18:20,620 Εμείς πάμε για να μιλήσουμε στη λογική. 1659 01:18:20,620 --> 01:18:21,870 >> ΦΟΙΤΗΤΗΣ 81: OK. 1660 01:18:21,870 --> 01:18:25,090 1661 01:18:25,090 --> 01:18:27,410 Ποια ήταν η ερώτηση; 1662 01:18:27,410 --> 01:18:28,892 >> JASON Hirschhorn: Απλά σήκωσε το χέρι σας. 1663 01:18:28,892 --> 01:18:31,600 Δεν υπήρχε καμία αμφιβολία. 1664 01:18:31,600 --> 01:18:32,520 Επιτρέψτε μου να το παρουσιάσει. 1665 01:18:32,520 --> 01:18:34,560 Επιτρέψτε μου να συζητήσει αυτό το λίγο. 1666 01:18:34,560 --> 01:18:38,400 Έτσι, έχουμε ένα pixel, θέλουμε να αναπαράγουν αυτό, τόσο οριζόντια όσο και 1667 01:18:38,400 --> 01:18:39,360 κατακόρυφα. 1668 01:18:39,360 --> 01:18:48,920 Έτσι, στην ιδανική αυτό που κάνουμε εδώ είναι, εμείς διαβάζονται pixel μας, το γράφουμε 1669 01:18:48,920 --> 01:18:51,690 Ωστόσο, πολλές φορές. 1670 01:18:51,690 --> 01:18:54,720 >> Στη συνέχεια, όμως έχουμε τέχνασμα μας εδώ, διότι Στη συνέχεια θέλουμε να μεταβείτε στην 1671 01:18:54,720 --> 01:18:57,660 επόμενη γραμμή και να το γράψετε σε η έναρξη της επόμενης γραμμής. 1672 01:18:57,660 --> 01:19:02,960 Έτσι, αν θέλουμε να αναπαράγουν τόσο οριζοντίως και καθέτως, τι είναι 1673 01:19:02,960 --> 01:19:05,050 ένας καλός τρόπος για να το κάνουμε αυτό - 1674 01:19:05,050 --> 01:19:06,780 ένα καλό όμως να το κάνουμε αυτό; 1675 01:19:06,780 --> 01:19:11,950 Γι 'αυτό και δεν χρειάζεται να αναζητούμε διαρκώς γύρω από το αρχείο μας να τοποθετήσετε τα πράγματα. 1676 01:19:11,950 --> 01:19:14,360 >> Το ερώτημα αυτό μπορεί να μην έχει έκανε αίσθηση, αλλά νομίζω ότι μια 1677 01:19:14,360 --> 01:19:15,800 απαντήσει σε αυτό θα βοηθήσει. 1678 01:19:15,800 --> 01:19:17,210 >> ΦΟΙΤΗΤΗΣ 82: Δημιουργήστε μια σειρά; 1679 01:19:17,210 --> 01:19:20,090 >> JASON Hirschhorn: Ας σκεφτούμε κάθε αρχείο ως μια σειρά. 1680 01:19:20,090 --> 01:19:22,550 Ας σκεφτούμε σε γραμμές. 1681 01:19:22,550 --> 01:19:26,670 Αν έχουμε την πρώτη σειρά μας από τα μικρά μας εικόνα, μπορούμε να κάνουμε αυτή τη γραμμή 1682 01:19:26,670 --> 01:19:30,640 σε ένα μεγάλο σειρά από μία μεγάλη εικόνα, και στη συνέχεια να αναπαράγουν αυτή τη γραμμή, ωστόσο 1683 01:19:30,640 --> 01:19:34,250 πολλές φορές χρειάζεται να επαναληφθεί, αντί να πηγαίνει pixel προς pixel, 1684 01:19:34,250 --> 01:19:37,260 η οποία γίνεται σύγχυση όταν που ασχολούνται με τα αρχεία. 1685 01:19:37,260 --> 01:19:38,730 >> Διότι αν είχαμε - 1686 01:19:38,730 --> 01:19:41,260 Τρέχω από το διάστημα. 1687 01:19:41,260 --> 01:19:46,490 Αν αυτό είναι το αρχείο μας, και έχουμε ότι ένα pixel εκεί, και θέλουμε να το θέσω 1688 01:19:46,490 --> 01:19:49,840 εκεί, έχουμε ακόμα κάποια πράγματα ότι χρειάζεται να πάμε εκεί όταν είμαστε 1689 01:19:49,840 --> 01:19:51,450 γραφή και τη δημιουργία νέου αρχείου μας - 1690 01:19:51,450 --> 01:19:53,250 Αρχείο μας που είναι διπλάσια. 1691 01:19:53,250 --> 01:19:56,820 >> Αλλά είναι πραγματικά δύσκολο με τις λειτουργίες του αρχείου να προσπερνά σε νέες γραμμές 1692 01:19:56,820 --> 01:20:00,260 όπως αυτό, και στη συνέχεια να επιστρέψετε εδώ και να βάλει τα πράγματα εκεί. 1693 01:20:00,260 --> 01:20:04,500 Είναι σχεδόν αδύνατο να κάνει κάτι έτσι, αν αυτό έχει νόημα. 1694 01:20:04,500 --> 01:20:10,180 Έτσι, αν πιστεύουμε σε γραμμές, μπορούμε λάβει σειρά μας, και στη συνέχεια το βάζουμε - 1695 01:20:10,180 --> 01:20:11,720 αναπαράγουν σειρές κάθετα. 1696 01:20:11,720 --> 01:20:15,860 >> Και αυτό είναι το πώς θα ασχοληθεί με την αλλαγή μεγέθους κάθετα αντί οριζόντια. 1697 01:20:15,860 --> 01:20:18,810 Αυτό ήταν το είδος της ταχείας και μια μικρή σύγχυση. 1698 01:20:18,810 --> 01:20:22,375 Δυστυχώς ο χρόνος μας τελείωσε. 1699 01:20:22,375 --> 01:20:27,340 Θα σταθεί έξω για όσους από εσάς εδώ που έχουν ερωτήσεις σχετικά με το 1700 01:20:27,340 --> 01:20:30,500 σύνολο του προβλήματος, περιλαμβανομένης ανακάμψει. 1701 01:20:30,500 --> 01:20:32,320 >> Οπότε ας διακόψουμε για τώρα. 1702 01:20:32,320 --> 01:20:34,480 Και πάλι, αν έχετε οποιεσδήποτε ερωτήσεις, μπορούμε να συνομιλήσετε έξω. 1703 01:20:34,480 --> 01:20:38,294