Οδηγός Μελέτης - Εισαγωγή στον Προγραμματισμό

Κ14.7 · Η strcat με τον εαυτό της

Kahoot «Δυαδική Αναζήτηση, Ταξινόμηση, Πολυπλοκότητα και άλλα» και «Εμβέλεια, Μνήμη και Συμβολοσειρές» (διάλεξη 14) · Δυσκολία ★★★ · multiple-choice · 24% σωστές απαντήσεις (127 απαντήσεις στο αμφιθέατρο) · Κεφάλαια: 14

Τι θα τυπώσει ο παρακάτω κώδικας;

char fruit[10];
strcpy(fruit, "banana");
strcat(fruit, fruit);
strcat(fruit, fruit);
printf("%s", fruit);

Συχνή παρανόηση

Το 34% επέλεξε bananabananabananabanana και το 24% bananabanana, κοιτάζοντας μόνο τη λογική της συνένωσης: ο πίνακας έχει 10 bytes, οπότε ήδη η πρώτη strcat γράφει εκτός ορίων, και η επικάλυψη πηγής και προορισμού είναι από μόνη της απροσδιόριστη συμπεριφορά.

Υπόδειξη

Μετρήστε πόσα bytes χρειάζεται το αποτέλεσμα, μαζί με το '\0', και συγκρίνετε με το μέγεθος του fruit. Σκεφτείτε επίσης τι σημαίνει για την strcat να διαβάζει από τον ίδιο πίνακα στον οποίο γράφει.

Αριθμός στον οδηγό: Κ14.7 (στο κεφάλαιο) · Μόνιμο αναγνωριστικό: kahoot-strcat-self-overflow · Σύνδεσμος: https://progintro.github.io/study/questions/kahoot/kahoot-strcat-self-overflow.html · Markdown (GitHub)