Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Απλά λέει - υποθέτω - ότι το '\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 αλλά είναι γραμμένη να προσπερνάει... άπειρα;

  • Απαντ. 86
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοφιλείς Ημέρες

Δημοσ.

Μα εδώ δεν φταίει το '\0' ρε σεις, μη με τρελαίνετε! Εδώ φταίει καθαρά ο προγραμματιστής.

 

Συμφωνούμε, απλά αν το χέρι σου έχει συνηθίσει στο '\000' αντί το '\0', αποφεύγεις να είσαι επιρρεπής σε λάθη, σε καταστάσεις σαν αυτή.

Δημοσ.

Συμφωνούμε, απλά αν το χέρι σου έχει συνηθίσει στο '\000' αντί το '\0', αποφεύγεις να είσαι επιρρεπής σε λάθη, σε καταστάσεις σαν αυτή.

Ε καλα, οχι να το γραφεις ετσι. Απλα να ξερουμε τι εστι \number. Να ξερει ο κοσμος οτι το \0 ειναι 0 μονο οταν δεν ακολουθουν αλλα 2 νουμερα [0-8]

Δημοσ.

Απλά λέει - υποθέτω - ότι το '\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: Με πρόλαβε ο παπί.

Δημοσ.

Μα εδώ δεν φταίει το '\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 αλλά είναι γραμμένη να προσπερνάει... άπειρα;

 

Η συναρτηση δουλευει μια χαρα (εγω την εγραψα μη χεσω :P ), αλλο ειναι το Point.
Δημοσ.

Ε καλα, οχι να το γραφεις ετσι. Απλα να ξερουμε τι εστι \number. Να ξερει ο κοσμος οτι το \0 ειναι 0 μονο οταν δεν ακολουθουν αλλα 2 νουμερα [0-8]

To '\0' είναι ΠΑΝΤΑ 0!

To '\0...' είναι octal representation!

 

EDIT:

 

Με πρόλαβε ο ημίθεος.

Δημοσ.

Να δω ο Τσοκολάτας αν θα προλάβει τη Λόλα από τη φωτιά να βγάλει :lol:

 

Ηθικόν δίδαγμα: Τα "αυτάκια" matter (τουτέστιν άλλο το '\0' κι άλλο το '\0...')

 

EDIT:

 

Παρεμπιπτόντως, πώς ακριβώς το '\000' λύνει το πρόβλημα της παραπάνω συνάρτησης. Τί μου διαφύγει; NUL το ένα, NUL και το άλλο.

Δημοσ.
const char* dnsa = "Ela\0stis\012\0";

σε αντίθεση με

const char* dnsa = "Ela\000stis\00012\000";

(εν προκειμένω, μιλάμε για το 2ο \0, αλλά τα άλλαξα όλα χάριν ομοιομορφίας)

Δημοσ.

Φοβάμαι πως εδώ προσπαθούμε να "διορθώσουμε" ένα λάθος (την υλοποίηση της συνάρτησης) κάνοντας "δεύτερο" λάθος (θεωρώντας δλδ πως το '\0' διαφέρει σε κάτι από το '\000').

 

Τα '\0' και '\000' δεν έχουν απολύτως καμία διαφορά σύμφωνα με τα όσα γνωρίζω εγώ... και τα 2 αντιστοιχούν σε ένα μηδενισμένο byte.

 

Με άλλα λόγια εξακολουθώ να μην καταλαβαίνω τι εννοείτε :(

Δημοσ.

Τα '\0' και '\000' δεν έχουν απολύτως καμία διαφορά σύμφωνα με τα όσα γνωρίζω εγώ... και τα 2 αντιστοιχούν σε ένα μηδενισμένο byte.

 

Με άλλα λόγια εξακολουθώ να μην καταλαβαίνω τι εννοείτε :(

Δεν είπε κανείς ότι (ουσιαστικά) διαφέρουν . Το θέμα ξεκίνησε να μιλάει για pointers και όπως πάντα ξέφυγε και καταλήξαμε να μιλάμε για το 0 και το '\0'. Έτσι ο παπί μας την είπε ότι το '\000' είναι πιο σωστό μήπως και νιώσουμε ότι ξεφύγαμε και σταματήσουμε. Εμείς αντίθετα πιαστήκαμε από αυτό και ξεφύγαμε ακόμη περισσότερο και αναλύουμε τώρα το '\000' :P

  • Like 1
Δημοσ.

Α, πες το έτσι... εγώ νόμιζα πως μιλούσε σοβαρά ο παπι, είδα να συμφωνεί και ο geomagas και λέω τί γίνεται εδώ πέρα; Θα ξεχάσουμε κι αυτά που ξέρουμε στο τέλος :lol:

Δημοσ.

Το οτι την πατησα με αυτη τη παπαρια ειναι αληθεια. Αυτο το φορματ( το double terminated ) μπαινει στο openfiledialog των win. Βαζω ο ανθρωπος "mpla mpla\03dx\0" και εχασα 5 ωρες απο την ζωη μου. Τοσο απλα.

Δημοσ.

@migf1

Με τη διαφορά ότι εγώ στο τέλος μπήκα στο τριπάκι να στο εξηγήσω...

Μου συμβαίνει πότε-πότε! :-)

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...