Star_Light έγραψε:Λιγο πριν προχωρησουμε εχω κάποιες απορίες.
1.
Στο
- Κώδικας: Επιλογή όλων
char s[100]="testing"
μπορει να δεχθεί άλλες 92 τιμές για είσοδο? Πχ απο τον χρήστη... (φυσικά απο τον δείκτη s[5] και μετα )
Ναι, 91 ωφέλιμους (κι έναν για το '\0'). Αυτό που με μπερδεύει στην ερώτησή σου είναι το "να δεχτεί κι άλλους χαρακτήρες από τον χρήστη". Και με μπερδεύει γιατί ο χρήστης μπορεί να γράψει στην κύρια είσοδο ότι του κατέβει στο κεφάλι, το θέμα είναι τι κάνει ο προγραμματιστής με τα δεδομένα που του δίνει ο χρήστης (ποια κρατάει, ποια πετάει, ποια αφήνει ίδια, ποια μετατρέπει σε αριθμούς, κλπ, κλπ).
έγραψε:Απο οσο εχω καταλαβει ενα string ειναι ενας πίνακας χαρακτήρων αλλα μπορω και με βεβαιότητα να πω (συμφωνα με αυτα που εδωσε και ο migf και τα διαβασα αρκετα καλα) οτι ενας πίνακας χαρακτήρων δεν ειναι απαραίτητα ενα string. Οκ?
Ακριβώς
έγραψε:
2. Κανονικα το
- Κώδικας: Επιλογή όλων
char s[] = "";
δεν μπορει να περιμένει είσοδο απο τον χρήστη ή πρεπει να του ορίσεις μια τιμή στο μέγεθος (του πίνακα) ωστε να ξέρει ο μεταγλωττιστής απο ποιο σημείο και μετα θα πρεπει να βάλει τον μηδενικο χαρακτηρα ο οποιος και σηματοδοτει το τελος της συμβολοσειρας για να ελενξει με πιο σωστο τροπο την εισοδο του χρηστη?
Στον παραπάνω ορισμό το s περιέχει ήδη τον μηδενικό χαρακτήρα. Ο παραπάνω ορισμός είναι ισοδύναμος του:
- Κώδικας: Επιλογή όλων
char s[1] = { '\0' );
Ελπίζω αυτό να απαντάει την ερώτηση (επίσης πάλι δεν καταλαβαίνω τι εννοείς όταν λες "να περιμένει είσοδο από το χρήστη"... ποιος να περιμένει είσοδο από το χρήστη; )
έγραψε:
Και τελος αν
3.
- Κώδικας: Επιλογή όλων
char usernme[32];
Αν δηλωσεις δηλαδη εναν πίνακα με στοιχεια παραπανω απο οσα χρειάζεσαι (επειδη πχ το UNIX επιτρέπει μεχρι 8 χαρακτήρες ονοματα) τοτε εδω μπορει να γινει ας πουμε buffer overflow?
Overflow (άνω υπερχείλιση) έχουμε όταν εσύ ως προγραμματιστής συνειδητά ή κατά λάθος προσπαθείς να διαχειριστείς κάποιο στοιχείο που βρίσκεται μετά το τέλος του οποιουδήποτε πίνακά σου, της δομής σου, κλπ. Underflow (κάτω υπερχείλιση) έχουμε όταν προσπαθείς να διαχειριστείς στοιχεία που βρίσκονται πριν από την αρχή του οποιουδήποτε πίνακά σου, της δομής σου, κλπ.
(αυτό με το UNIX, δεν καταλαβαίνω τι εννοείς αλλά αν είναι αυτό που νομίζω ότι μπορεί να εννοείς (ονόματα αρχείων) ΔΕΝ ισχύει... μια χαρά πάνω από 8 χαρακτήρες επιτρέπει το UNIX).



