Ενδιαφέρον. Γιατί η READ_STRING
δεν δεσμεύει μνήμη (και το documentation της ειναι ελαφρως παραπλανητικό). Άρα ουσιαστικά πας να γράψεις θέσεις μνήμης που δεν έχεις δεσμεύσει.
Αυτό που θα έπρεπε να κάνεις είναι πχ
char a[5];
READ_STRING(5, a);
Keep in mind ότι αν το input του χρήστη ξεπεράσει το μέγεθος του πίνακα μεωμένο κατα 1, θα έχεις πάλι segfault.