>> ΟΜΙΛΗΤΗΣ: Ας γράψουμε ένα πρόγραμμα που ζητά από το χρήστη για δύο χορδές και
Στη συνέχεια αναφέρει αν οι χορδές είναι τα ίδια ή δεν είναι το ίδιο.
Έχω ήδη αρχίσει να μας μακριά από εδώ καλώντας printf δύο φορές και καλώντας
GetString δύο φορές, την αποθήκευση της επιστροφής τιμές σε s και t, αντιστοίχως.
>> Τώρα, το ένστικτό μου για να συγκρίνετε αυτές τις δύο χορδές θα ήταν να χρησιμοποιήσετε το οικείο
φορέας της ισότητας -
αν s ισούται ισούται με t.
Στη συνέχεια, Πάω να πάει μπροστά και να εκτυπώσετε out "Πληκτρολογήσατε το ίδιο πράγμα!
Αλλιώς, αν αυτό δεν είναι αλήθεια, είμαι απλά πρόκειται να πληκτρολογήσετε printf ("Έχετε πληκτρολογήσει
διαφορετικά πράγματα!
>> Αρκετά απλή -
Είμαι απλά συγκρίνοντας s κατά t, και αν είναι ίσες,
εκτύπωση τόσο πολύ.
Ας συγκεντρώσει και να τρέξει αυτό το πρόγραμμα.
Κάντε συγκρίνουν 0. / Συγκρίνετε 0, να πω κάτι, γεια σου,
πω κάτι, γεια.
>> Δυστυχώς, το πρόγραμμα θεωρεί έχω δακτυλογραφημένες διαφορετικά πράγματα, ακόμα κι αν
σαφώς πληκτρολογήσει "γεια" η ίδιο τρόπο και τις δύο φορές.
Τώρα, γιατί θα μπορούσε να είναι;
>> Λοιπόν, αποδεικνύεται ότι όλα αυτά χρόνο, χορδές ήταν λίγο πιο
περίπλοκη από μια ακολουθία χαρακτήρων κάτω από το καπό.
Στην πραγματικότητα, ένα string είναι ένας δείκτης ή μια διεύθυνση, και συγκεκριμένα η διεύθυνση
του πρώτου χαρακτήρα από το ότι ακολουθία χαρακτήρων.
>> Και έτσι όταν συγκρίνουμε s κατά τ με ίση σύμβολο της ισότητας, είμαστε
πραγματικά ζητώντας, είναι αυτή η διεύθυνση ίση ίση με αυτή τη διεύθυνση;
Και αυτό δεν πρόκειται να συμβεί αν ο χρήστης έχει πληκτρολογήσει σε δύο διαφορετικά
χορδές και έχουμε ονομάζονται GetString δύο φορές να τους πάρει, επειδή η μνήμη
ότι GetString χρησιμοποιεί για να αποθηκεύσει το πρώτο χορδών θα μπορούσε να είναι εδώ στη μνήμη RAM, αλλά η
μνήμης που χρησιμοποιεί GetString να αποθηκεύσετε η δεύτερη σειρά θα
να είναι εδώ στη μνήμη RAM.
Και φυσικά, στη συνέχεια, οι δύο αυτές κομμάτια μνήμης έχουν διαφορετικές διευθύνσεις για
πρώτη τους χαρακτήρες τους.
>> Έτσι είναι s ίση ίσο με t;
Λοιπόν, όχι.
Αν s και t δείχνουν προς διαφορετικές κομμάτια της μνήμης, όπως θα γίνει με
καλώντας GetString δύο φορές, δεν είναι, Στην πραγματικότητα, πρόκειται να είναι το ίδιο.
Έτσι φαίνεται να είναι η περίπτωση ότι για να συγκρίνει δύο χορδές της διαισθητικής
τρόπο που περιμένουμε, χαρακτήρα χαρακτήρα, χρειαζόμαστε μια άλλη τεχνική
συνολικά.