Warum konvertierung von char* nach char??
-
1. \0 = Stringendezeichen => da der "String" nur ein Zeihen lang ist, isser da auch gleich wieder zu ende.
2. besser, find ich zumindest, wärestate = NULL;
-
el Clio schrieb:
2. besser, find ich zumindest, wäre
state = NULL;
NULL ist ein Makro und steht für 0. Also NULL, 0 und '\0' sind letztlich gleichwertig.
-
dschensky schrieb:
el Clio schrieb:
2. besser, find ich zumindest, wäre
state = NULL;
NULL ist ein Makro und steht für 0. Also NULL, 0 und '\0' sind letztlich gleichwertig.
Würde ich jetzt nicht behaupten. Während '\0' immer das Stringendzeichen ist, kann man nicht wirklich sagen, was NULL wirklich repräsentiert...
-junix
-
NULL und 0 ist gleichwertig. Das ist schon richtig. \0 agt aber wirklich was anderes aus.
Ich hab ja auch hingeschrieben, dass ICH das "schöner" finde. Sieht einfach professioneller aus und jeder, ders liest weiss sofort, was bezweckt wird.
-
Ohne dir zu nahe treten zu wollen, aber für mich sieht eine Zuweisung eines NULL-Zeigers zu einem Character eher stümperhaft und "bastelig" als "professionell" aus. Alleine durch die Tatsache, dass der Programmierer eindeutig nicht weiss, was hinter dem Makro "NULL" steckt.
Ausserdem:
Ich hab ja auch hingeschrieben, dass ICH das "schöner" finde.[...NULL zuzuweisen statt '\0' (Anmerkung von junix)...] Sieht einfach professioneller aus und jeder, ders liest weiss sofort, was bezweckt wird.
Also wenn ich sowas lese, frage ich mich eher was der Programmierer damit bezwecken wollte, einen Zeiger in einen 8Bit-Datentyp zu quetschen.
Wenn ich hingegen eine Zuweisung von '\0' sehe, dann weiss ich sofort: "Der Programmierer wollte an dieser Stelle einen Stringabschluss setzen."
Für jemanden der sein Werkzeug (/die Sprache) kennt ist letzteres also wesentlich verständlicher.
Natürlich hindert dich niemand daran, ein eigenes Makro wie z.B.#define EOS '\0' // EOS = EndOfString
zu definieren. Halte ich aber für weitgehend sinnlos.
-junix
-
junix schrieb:
Alleine durch die Tatsache, dass der Programmierer eindeutig nicht weiss, was hinter dem Makro "NULL" steckt.
Wenn der Programmierer nicht weiss, was hinter dem Makro "NULL" steckt, dann sollte er z.B. VB lieber machen.
Wenn ich hingegen eine Zuweisung von '\0' sehe, dann weiss ich sofort: "Der Programmierer wollte an dieser Stelle einen Stringabschluss setzen."
Das ist natürlich absolut richtig.
Für jemanden der sein Werkzeug (/die Sprache) kennt...
S. Punkt 1.
-
junix schrieb:
Ohne dir zu nahe treten zu wollen, aber für mich sieht eine Zuweisung eines NULL-Zeigers zu einem Character eher stümperhaft und "bastelig" als "professionell" aus. Alleine durch die Tatsache, dass der Programmierer eindeutig nicht weiss, was hinter dem Makro "NULL" steckt.
Ausserdem:
Ich hab ja auch hingeschrieben, dass ICH das "schöner" finde.[...NULL zuzuweisen statt '\0' (Anmerkung von junix)...] Sieht einfach professioneller aus und jeder, ders liest weiss sofort, was bezweckt wird.
Also wenn ich sowas lese, frage ich mich eher was der Programmierer damit bezwecken wollte, einen Zeiger in einen 8Bit-Datentyp zu quetschen.
Wenn ich hingegen eine Zuweisung von '\0' sehe, dann weiss ich sofort: "Der Programmierer wollte an dieser Stelle einen Stringabschluss setzen."
Für jemanden der sein Werkzeug (/die Sprache) kennt ist letzteres also wesentlich verständlicher.
Natürlich hindert dich niemand daran, ein eigenes Makro wie z.B.#define EOS '\0' // EOS = EndOfString
zu definieren. Halte ich aber für weitgehend sinnlos.
-junix
Jedem seine Meinung.
Da kannst du schon recht haben mit. Und nur nebenbei: Er will keinem Zeiger was zuweisen. Sein "String" ist nur 1 Zeichen lang.
Aber egal. läuft ja so oder so für ihn alles auf gleiche raus.
-
Moin,
hier ein Versuch, das ganze etwas zusammenzufassen- NULL ist ein Makro (z.B. zu finden in der Windef.h) und nur ein Alias für 0:
#define NULL 0
Es wird oft für die Initialisierung von Zeigern verwendet (mache ich auch immer), weil es so schön ins Auge fällt. Allerdings wird davon eher abgeraten (Stroustrup). Statt dessen wird die Verwendung von
const int NULL = 0;
empfohlen, wenn man denn glaubt, NULL unbedingt verwenden zu müssen.
-
'\0' ist ein Zeichenliteral und als solches vom Typ char. Es ist also auch nur eine symbolische Konstante für den Wert 0. Man kann damit also auch Zeiger initialisieren, obwohl das natürlich räudig aussieht. Andererseits bedeutet dies aber, daß nichts dagegen spricht, einen c-String mit 0 oder NULL, statt '\0' zu terminieren. Sieht auch ein wenig räudig aus.
Letztlich hat die Verwendung der verschiedenen Formen also vor allem etwas mit Lesbarket des Quellcodes zu tun. -
0 ist 0 (diese Weisheit lasse ich mal in meinen Grabstein meißeln)
-
1. Man quotet für gewöhnlich nur die Zeilen auf die man sich bezieht. Nähere siehe hier.
el Clio schrieb:
Und nur nebenbei: Er will keinem Zeiger was zuweisen.
Richtig. Das ist ja grade der springende Punkt. Ich darf zitieren:
junix schrieb:
Ohne dir zu nahe treten zu wollen, aber für mich sieht eine Zuweisung eines NULL-Zeigers zu einem Character eher stümperhaft und "bastelig" als "professionell" aus.
Und was die Definition von NULL angeht, so kann sie ausserdem noch
#define NULL (void *) 0
sein...
-junix
-
junix schrieb:
Und was die Definition von NULL angeht, so kann sie ausserdem noch
#define NULL (void *) 0
sein...
Ja, stimmt. Das währe dann ein Grund mehr, NULL nicht zu verwenden.
("#define NULL 0L" habe ich auch noch gefunden)