>> ΟΜΙΛΗΤΗΣ 1: Ας τώρα να καθορίσει ότι το τελευταίο πρόγραμμα.
Και αυτή τη φορά, ας διαθέσει ρητά κάποια μνήμη στην οποία η
είσοδο του χρήστη θα αποθηκεύονται.
Για να γίνει αυτό, ας ακονίσει το σε αυτή την πρώτη γραμμή του κώδικα όπου δηλώνονται s
προηγουμένως να είναι ένα αστέρι char.
Αυτή τη φορά, ας εκ νέου δηλώνουν ως εξής: -
char s βραχίονα 16, για παράδειγμα, κλείσιμο παρένθεσης.
>> Με άλλα λόγια, ας δηλώσει s σε καμία πλέον να είναι μια διεύθυνση ενός χαρακτήρα,
αλλά μάλλον μια συστοιχία 16 χαρακτήρων.
Με αυτό τον τρόπο, ο χρήστης μπορεί να πληκτρολογήσει μέχρι και σε 15 χαρακτήρες και εξακολουθούν να αφήνουν περιθώρια για
μια μηδενική τερματισμού.
Ας προχωρήσουμε για να σώσει, Μεταγλώττιση, και να εκτελέσετε αυτό το πρόγραμμα.
Κάντε scanf2 dot κάθετο scanf2.
Ας τώρα να πληκτρολογήσουν μια σειρά, όπως γειά σου, και είμαστε ευχαρίστησε για την γεια.
>> Τώρα, υπάρχει ακόμα ένα πρόβλημα.
Έχω πληκτρολογήσει μόνο σε Γεια σας, το οποίο είναι μόνο πέντε χαρακτήρες, συν 1 για τη μηδενική
τερματιστή.
Μας αφήνει με μόνο ανάγκη για έξι bytes.
>> Αλλά δυστυχώς, μόνο 16 κατανέμονται στο σύνολο.
Έτσι, εάν ο χρήστης στην πραγματικότητα οι τύποι στο 16 χαρακτήρες, ή 17, ή αρκετές εκατοντάδες
χαρακτήρες, είμαστε ακόμα δεν πρόκειται να έχουν αρκετό χώρο στη μνήμη για την
είσοδο του χρήστη.
Και στην πραγματικότητα, αυτό είναι που κάνει να πάρει την είσοδο του χρήστη, ώστε
δύσκολο γενικά.
Και πράγματι, αυτός είναι ο λόγος που εφαρμόσαμε το string συνάρτηση πάρει το πρώτο
θέση στη βιβλιοθήκη CS50 -
να καταλάβω πώς να χειριστεί εκείνες περιπτώσεις όπου ο χρήστης πληκτρολογεί το
περισσότερους χαρακτήρες από ό, τι προβλεπόταν αρχικά.
>> Ειλικρινά, χωρίς την πλήρη ξαναγράφοντας το πρόγραμμα αυτό,
δεν υπάρχει καθαρή λύση.
Αντίθετα, αυτό που θα πρέπει να κάνετε είναι να πάρετε ένα χαρακτήρα από τον χρήστη ένα σε ένα
χρόνο, ξανά και ξανά.
Και σε κάθε σημείο, αν συνειδητοποιούμε πως βρισκόμαστε έξω από τη μνήμη, θα πρέπει να σε
εκείνο το σημείο πάμε πίσω και να ανακατανείμει κάποια περισσότερη μνήμη, αντιγράψτε τον χρήστη
προηγούμενη εισαγωγή από την πρώτη μας κομμάτι της μνήμης στο νέο,
μεγαλύτερο κομμάτι της μνήμης.
Και στη συνέχεια, επαναλάβετε τη διαδικασία και και πάλι μέχρις ότου ο χρήστης γίνεται παροχή
εισόδου του.