migf1 Δημοσ. 13 Μαΐου 2014 Δημοσ. 13 Μαΐου 2014 Απλά λέει - υποθέτω - ότι το '\000' είναι ακόμα καλύτερη "συνήθεια" από το '\0'. Μα εδώ δεν φταίει το '\0' ρε σεις, μη με τρελαίνετε! Εδώ φταίει καθαρά ο προγραμματιστής. EDIT: void print_char_array_with_two_NUL_chars( const char* s ) { printf("->Begin\n"); for (int i=0; i < 2 && *s; i++, s += strlen(s)+1 ) printf(">%s\n", s); printf("->End\n"); } στο φόρουμ το έγραψα, δεν το έτρεξα... κάπως έτσι έπρεπε να ήταν εξαρχής γραμμένη η συνάρτηση. Τι λογική υπάρχει σε μια συνάρτηση που υποτίθεται θέλει να προσπεράσει 2 NULs αλλά είναι γραμμένη να προσπερνάει... άπειρα;
geomagas Δημοσ. 13 Μαΐου 2014 Δημοσ. 13 Μαΐου 2014 Μα εδώ δεν φταίει το '\0' ρε σεις, μη με τρελαίνετε! Εδώ φταίει καθαρά ο προγραμματιστής. Συμφωνούμε, απλά αν το χέρι σου έχει συνηθίσει στο '\000' αντί το '\0', αποφεύγεις να είσαι επιρρεπής σε λάθη, σε καταστάσεις σαν αυτή.
παπι Δημοσ. 13 Μαΐου 2014 Δημοσ. 13 Μαΐου 2014 Συμφωνούμε, απλά αν το χέρι σου έχει συνηθίσει στο '\000' αντί το '\0', αποφεύγεις να είσαι επιρρεπής σε λάθη, σε καταστάσεις σαν αυτή. Ε καλα, οχι να το γραφεις ετσι. Απλα να ξερουμε τι εστι \number. Να ξερει ο κοσμος οτι το \0 ειναι 0 μονο οταν δεν ακολουθουν αλλα 2 νουμερα [0-8]
imitheos Δημοσ. 13 Μαΐου 2014 Δημοσ. 13 Μαΐου 2014 Απλά λέει - υποθέτω - ότι το '\000' είναι ακόμα καλύτερη "συνήθεια" από το '\0'. Μπορεί να είμαι λάθος φυσικά αλλά εγώ το ερμήνευσα διαφορετικά. #include <stdio.h> int main(void) { printf("%d - %d\n", 10, 010); printf("%c - %c\n", '\050', 50); return 0; } Έξοδος: 10 - 8 ( - 2 Το πρότυπο λέει ότι όταν μια σταθερά αρχίζει με 0 αυτό δηλώνει οκταδικό σύστημα. Για αυτό το λόγο το παραπάνω 010 δεν εμφανίζει 10 αλλά 8 και το ίδιο γίνεται και με τους χαρακτήρες. Όταν έχεις το \0 και μετά άλλα ψηφία θα το εκλάβει ως οκταδικό. Edit: Με πρόλαβε ο παπί.
παπι Δημοσ. 13 Μαΐου 2014 Δημοσ. 13 Μαΐου 2014 Μα εδώ δεν φταίει το '\0' ρε σεις, μη με τρελαίνετε! Εδώ φταίει καθαρά ο προγραμματιστής. EDIT: void print_char_array_with_two_NUL_chars( const char* s ) { printf("->Begin\n"); for (int i=0; i < 2 && *s; i++, s += strlen(s)+1 ) printf(">%s\n", s); printf("->End\n"); } στο φόρουμ το έγραψα, δεν το έτρεξα... κάπως έτσι έπρεπε να ήταν εξαρχής γραμμένη η συνάρτηση. Τι λογική υπάρχει σε μια συνάρτηση που υποτίθεται θέλει να προσπεράσει 2 NULs αλλά είναι γραμμένη να προσπερνάει... άπειρα; Η συναρτηση δουλευει μια χαρα (εγω την εγραψα μη χεσω ), αλλο ειναι το Point.
migf1 Δημοσ. 13 Μαΐου 2014 Δημοσ. 13 Μαΐου 2014 Ε καλα, οχι να το γραφεις ετσι. Απλα να ξερουμε τι εστι \number. Να ξερει ο κοσμος οτι το \0 ειναι 0 μονο οταν δεν ακολουθουν αλλα 2 νουμερα [0-8] To '\0' είναι ΠΑΝΤΑ 0! To '\0...' είναι octal representation! EDIT: Με πρόλαβε ο ημίθεος.
παπι Δημοσ. 13 Μαΐου 2014 Δημοσ. 13 Μαΐου 2014 Edit: Με πρόλαβε ο παπί. Με πρόλαβε ο ημίθεος. Σοβαρα τωρα;
geomagas Δημοσ. 13 Μαΐου 2014 Δημοσ. 13 Μαΐου 2014 Ναι ρε παιδιά όλοι το ίδιο λέμε! EDIT: Με προλάβατε όλοι... EDIT2: Σοβαρά!
migf1 Δημοσ. 13 Μαΐου 2014 Δημοσ. 13 Μαΐου 2014 Να δω ο Τσοκολάτας αν θα προλάβει τη Λόλα από τη φωτιά να βγάλει Ηθικόν δίδαγμα: Τα "αυτάκια" matter (τουτέστιν άλλο το '\0' κι άλλο το '\0...') EDIT: Παρεμπιπτόντως, πώς ακριβώς το '\000' λύνει το πρόβλημα της παραπάνω συνάρτησης. Τί μου διαφύγει; NUL το ένα, NUL και το άλλο.
geomagas Δημοσ. 13 Μαΐου 2014 Δημοσ. 13 Μαΐου 2014 const char* dnsa = "Ela\0stis\012\0"; σε αντίθεση με const char* dnsa = "Ela\000stis\00012\000"; (εν προκειμένω, μιλάμε για το 2ο \0, αλλά τα άλλαξα όλα χάριν ομοιομορφίας)
migf1 Δημοσ. 13 Μαΐου 2014 Δημοσ. 13 Μαΐου 2014 Φοβάμαι πως εδώ προσπαθούμε να "διορθώσουμε" ένα λάθος (την υλοποίηση της συνάρτησης) κάνοντας "δεύτερο" λάθος (θεωρώντας δλδ πως το '\0' διαφέρει σε κάτι από το '\000'). Τα '\0' και '\000' δεν έχουν απολύτως καμία διαφορά σύμφωνα με τα όσα γνωρίζω εγώ... και τα 2 αντιστοιχούν σε ένα μηδενισμένο byte. Με άλλα λόγια εξακολουθώ να μην καταλαβαίνω τι εννοείτε
imitheos Δημοσ. 13 Μαΐου 2014 Δημοσ. 13 Μαΐου 2014 Τα '\0' και '\000' δεν έχουν απολύτως καμία διαφορά σύμφωνα με τα όσα γνωρίζω εγώ... και τα 2 αντιστοιχούν σε ένα μηδενισμένο byte. Με άλλα λόγια εξακολουθώ να μην καταλαβαίνω τι εννοείτε Δεν είπε κανείς ότι (ουσιαστικά) διαφέρουν . Το θέμα ξεκίνησε να μιλάει για pointers και όπως πάντα ξέφυγε και καταλήξαμε να μιλάμε για το 0 και το '\0'. Έτσι ο παπί μας την είπε ότι το '\000' είναι πιο σωστό μήπως και νιώσουμε ότι ξεφύγαμε και σταματήσουμε. Εμείς αντίθετα πιαστήκαμε από αυτό και ξεφύγαμε ακόμη περισσότερο και αναλύουμε τώρα το '\000' 1
migf1 Δημοσ. 13 Μαΐου 2014 Δημοσ. 13 Μαΐου 2014 Α, πες το έτσι... εγώ νόμιζα πως μιλούσε σοβαρά ο παπι, είδα να συμφωνεί και ο geomagas και λέω τί γίνεται εδώ πέρα; Θα ξεχάσουμε κι αυτά που ξέρουμε στο τέλος
παπι Δημοσ. 13 Μαΐου 2014 Δημοσ. 13 Μαΐου 2014 Το οτι την πατησα με αυτη τη παπαρια ειναι αληθεια. Αυτο το φορματ( το double terminated ) μπαινει στο openfiledialog των win. Βαζω ο ανθρωπος "mpla mpla\03dx\0" και εχασα 5 ωρες απο την ζωη μου. Τοσο απλα.
geomagas Δημοσ. 13 Μαΐου 2014 Δημοσ. 13 Μαΐου 2014 @migf1 Με τη διαφορά ότι εγώ στο τέλος μπήκα στο τριπάκι να στο εξηγήσω... Μου συμβαίνει πότε-πότε!
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα