Δημοσιεύτηκε: 03 Μαρ 2012, 17:26
από migf1
Ilias95 έγραψε:Όμορφα. :)

Το:
Κώδικας: Επιλογή όλων
if ( msg[i] == '\n' )
msg[i--] = '\0';

Νομίζω πρέπει να γίνει:
Κώδικας: Επιλογή όλων
if ( msg[i] == '\n' )
msg[i] = '\0';

Γιατί χάνεται ένας χαρακτήρας στην έξοδο.

Σωστός, το διόρθωσα (καταραμένο copy & paste :lol:)

έγραψε:
migf1 έγραψε:παρατήρησε επίσης πως αρχικοποιώ το msg[] με όλο το μήκος τους γεμάτο μηδενικούς χαρακτήρες στην αρχή

Θα ήταν το ίδιο με;
Κώδικας: Επιλογή όλων
char msg[ MAXINPUT ] = {0};

Γιατί απ' ότι κατάλαβα το '\0' παίζει ρόλο στο να σηματοδοτήσει το "τέλος" του string. Ή υπάρχει λόγος που γίνεται και η αρχικοποίηση έτσι;

Είναι ακριβώς το ίδιο, ναι. Το '\0' ισοδυναμεί με ASCII code = 0 ... το βάζουμε έτσι για να είναι πιο ευδιάκριτο πως πρόκειται για πίνακα χαρακτήρων... έτσι κι αλλιώς εμείς είτε ως 0 είτε ως '\0' αρχικοποιούμε μονάχα το 1ο στοιχείο του πίνακα, τα υπόλοιπα τα μηδενίζει αυτόματα η C (είναι στα χαρακτηριστικά της γλώσσας να μην αρχικοποιεί αυτόματα σε 0 τις μη-καθολικές μεταβλητές, αλλά να αρχικοποιεί αυτόματα με μηδενικά bytes οτιδήποτε περισσεύει από δική μας ελλειπή αρχικοποίηση πινάκων).