1 00:00:00,000 --> 00:00:00,340 2 00:00:00,340 --> 00:00:01,960 >> ΟΜΙΛΗΤΗΣ 1: Ας τώρα να καθορίσει ότι το τελευταίο πρόγραμμα. 3 00:00:01,960 --> 00:00:04,920 Και αυτή τη φορά, ας διαθέσει ρητά κάποια μνήμη στην οποία η 4 00:00:04,920 --> 00:00:06,550 είσοδο του χρήστη θα αποθηκεύονται. 5 00:00:06,550 --> 00:00:09,600 Για να γίνει αυτό, ας ακονίσει το σε αυτή την πρώτη γραμμή του κώδικα όπου δηλώνονται s 6 00:00:09,600 --> 00:00:11,590 προηγουμένως να είναι ένα αστέρι char. 7 00:00:11,590 --> 00:00:14,210 Αυτή τη φορά, ας εκ νέου δηλώνουν ως εξής: - 8 00:00:14,210 --> 00:00:19,380 char s βραχίονα 16, για παράδειγμα, κλείσιμο παρένθεσης. 9 00:00:19,380 --> 00:00:23,690 >> Με άλλα λόγια, ας δηλώσει s σε καμία πλέον να είναι μια διεύθυνση ενός χαρακτήρα, 10 00:00:23,690 --> 00:00:26,610 αλλά μάλλον μια συστοιχία 16 χαρακτήρων. 11 00:00:26,610 --> 00:00:30,295 Με αυτό τον τρόπο, ο χρήστης μπορεί να πληκτρολογήσει μέχρι και σε 15 χαρακτήρες και εξακολουθούν να αφήνουν περιθώρια για 12 00:00:30,295 --> 00:00:31,570 μια μηδενική τερματισμού. 13 00:00:31,570 --> 00:00:35,870 Ας προχωρήσουμε για να σώσει, Μεταγλώττιση, και να εκτελέσετε αυτό το πρόγραμμα. 14 00:00:35,870 --> 00:00:40,770 Κάντε scanf2 dot κάθετο scanf2. 15 00:00:40,770 --> 00:00:45,100 Ας τώρα να πληκτρολογήσουν μια σειρά, όπως γειά σου, και είμαστε ευχαρίστησε για την γεια. 16 00:00:45,100 --> 00:00:46,440 >> Τώρα, υπάρχει ακόμα ένα πρόβλημα. 17 00:00:46,440 --> 00:00:50,140 Έχω πληκτρολογήσει μόνο σε Γεια σας, το οποίο είναι μόνο πέντε χαρακτήρες, συν 1 για τη μηδενική 18 00:00:50,140 --> 00:00:50,445 τερματιστή. 19 00:00:50,445 --> 00:00:53,610 Μας αφήνει με μόνο ανάγκη για έξι bytes. 20 00:00:53,610 --> 00:00:56,740 >> Αλλά δυστυχώς, μόνο 16 κατανέμονται στο σύνολο. 21 00:00:56,740 --> 00:01:01,305 Έτσι, εάν ο χρήστης στην πραγματικότητα οι τύποι στο 16 χαρακτήρες, ή 17, ή αρκετές εκατοντάδες 22 00:01:01,305 --> 00:01:04,410 χαρακτήρες, είμαστε ακόμα δεν πρόκειται να έχουν αρκετό χώρο στη μνήμη για την 23 00:01:04,410 --> 00:01:05,400 είσοδο του χρήστη. 24 00:01:05,400 --> 00:01:07,750 Και στην πραγματικότητα, αυτό είναι που κάνει να πάρει την είσοδο του χρήστη, ώστε 25 00:01:07,750 --> 00:01:08,940 δύσκολο γενικά. 26 00:01:08,940 --> 00:01:12,270 Και πράγματι, αυτός είναι ο λόγος που εφαρμόσαμε το string συνάρτηση πάρει το πρώτο 27 00:01:12,270 --> 00:01:13,900 θέση στη βιβλιοθήκη CS50 - 28 00:01:13,900 --> 00:01:16,900 να καταλάβω πώς να χειριστεί εκείνες περιπτώσεις όπου ο χρήστης πληκτρολογεί το 29 00:01:16,900 --> 00:01:19,710 περισσότερους χαρακτήρες από ό, τι προβλεπόταν αρχικά. 30 00:01:19,710 --> 00:01:21,750 >> Ειλικρινά, χωρίς την πλήρη ξαναγράφοντας το πρόγραμμα αυτό, 31 00:01:21,750 --> 00:01:23,290 δεν υπάρχει καθαρή λύση. 32 00:01:23,290 --> 00:01:26,970 Αντίθετα, αυτό που θα πρέπει να κάνετε είναι να πάρετε ένα χαρακτήρα από τον χρήστη ένα σε ένα 33 00:01:26,970 --> 00:01:28,860 χρόνο, ξανά και ξανά. 34 00:01:28,860 --> 00:01:32,510 Και σε κάθε σημείο, αν συνειδητοποιούμε πως βρισκόμαστε έξω από τη μνήμη, θα πρέπει να σε 35 00:01:32,510 --> 00:01:36,450 εκείνο το σημείο πάμε πίσω και να ανακατανείμει κάποια περισσότερη μνήμη, αντιγράψτε τον χρήστη 36 00:01:36,450 --> 00:01:39,400 προηγούμενη εισαγωγή από την πρώτη μας κομμάτι της μνήμης στο νέο, 37 00:01:39,400 --> 00:01:40,810 μεγαλύτερο κομμάτι της μνήμης. 38 00:01:40,810 --> 00:01:44,610 Και στη συνέχεια, επαναλάβετε τη διαδικασία και και πάλι μέχρις ότου ο χρήστης γίνεται παροχή 39 00:01:44,610 --> 00:01:45,860 εισόδου του. 40 00:01:45,860 --> 00:01:48,246