Hallo, wenn ich ein String deklariere und die einzelnen Felder erst später beschreibe muss ich in das letzte Element ein Nullzeichen schreiben. Ich möchte das Array später ja als String benutzen. so:
1 | |
2 | |
Geht das auch schöner oder ist das so üblich?
|
Anzeige
|
Char Array in C mit '\0' deklarierenHallo, wenn ich ein String deklariere und die einzelnen Felder erst später beschreibe muss ich in das letzte Element ein Nullzeichen schreiben. Ich möchte das Array später ja als String benutzen. so:
Geht das auch schöner oder ist das so üblich? Kann man so machen. Viele Wege führen nach Rom.
Alternativen wären u.a. ...
-- gar nicht initialisieren; erst wenn es gebraucht wird einen gültigen
string schreiben (bspw. mit strcpy)
-- komplett mit Nullen initialisieren: char buf[7] = { 0 } ;
-- wenn es ein Dezimalcounter werden soll, mit dem Startwert
initialisieren: char buf[] = "000000" ;
Kommt halt drauf an was du machen willst. :-)
Danke, 1. und 3. sind klar aber bei 2. mit
hätte ich gedacht ist dasselbe:
fehlt dann nicht das Nullzeichen '\0'? Elminjo A. schrieb: > aber bei 2. mit
hätte ich gedacht ist
> dasselbe:
> fehlt dann nicht das Nullzeichen '\0'?
0 ist identisch mit '\0'. Das ist das NUL-Zeichen - nicht zu verwecheln
mit NULL aus stdio.h.
'0' ist etwas ganz anderes, nämlich das druckbare ASCII-Zeichen einer
Null.
Obiges ist also etwas ganz anderes. Da steht:
und nicht
Gast
#4374548
Frank M. schrieb: > und nicht > char buf[7] = { '0' } ; ... und da wird nur das erste Element mit '0' besetzt. Die restlichen sechs werden mit 0 gefüllt. DirkB schrieb: > ... und da wird nur das erste Element mit '0' besetzt. Die restlichen > sechs werden mit 0 gefüllt. Jepp, das auch noch :-) DirkB schrieb: > ... und da wird nur das erste Element mit '0' besetzt. Die restlichen > sechs werden mit 0 gefüllt. Aber nur im Globalen Scope. In Funktionen sind die Restlichen undefiniert.
Gast
#4374559
Elminjo A. schrieb: > Danke, > > 1. und 3. sind klar > aber bei 2. mit
hätte ich gedacht ist
> dasselbe:
> fehlt dann nicht das Nullzeichen '\0'?
Durchaus nicht. Denn
ist das ASCII-Zeichen der Ziffer 0, während
der Integerwert 0 ist, was dem ASCII-Zeichen NULL entspricht. Allerdings sollte (wenn ich mich nicht gerade irre oder irgendeine Änderung am Standard übersehen habe oder für char arrays ein Sonderfall greift)
zum einen nicht alle Arrayelemente mit dem Integerwert 0 initialisieren - wenn überhaupt, nur das nullte - und zum anderen vermutlich eine Warnung bringen, das die Anzahl der Elemente nicht übereinstimmt. An sich sollte das aber für alle üblichen Anwendungen, wie strcyp, strlen, strcat usw. völlig hinreichen. Ganz dumm, aber am geschicktesten, wäre meiner Meinung nach:
Klaus schrieb: > der Integerwert 0 ist, was dem ASCII-Zeichen NULL entspricht. [Korinthe] NUL mit einem L [/Korinthe]
Gast
#4374575
Daniel A. schrieb: > DirkB schrieb: >> ... und da wird nur das erste Element mit '0' besetzt. Die restlichen >> sechs werden mit 0 gefüllt. > > Aber nur im Globalen Scope. In Funktionen sind die Restlichen > undefiniert. wie kommst du darauf?
Gast
#4374576
Daniel A. schrieb: > DirkB schrieb: >> ... und da wird nur das erste Element mit '0' besetzt. Die restlichen >> sechs werden mit 0 gefüllt. > > Aber nur im Globalen Scope. In Funktionen sind die Restlichen > undefiniert. Nein! Wenn bei der Definition von Arrays nur für eine Teil Werte vorgegeben werden, wird der Rest mit 0 gefüllt. Globale und static Variablen werden immer mit 0 initialisiert, solange nichts anderes angegeben wird.
Gast
#4374603
DirkB schrieb: > Wenn bei der Definition von Arrays nur für eine Teil Werte vorgegeben > werden, wird der Rest mit 0 gefüllt. > > Globale und static Variablen werden immer mit 0 initialisiert, solange > nichts anderes angegeben wird. Dann habe ich was falsches geschrieben. Sorry. Klaus schrieb: > ... > Allerdings sollte (wenn ich mich nicht gerade irre oder irgendeine > Änderung am Standard übersehen habe oder für char arrays ein Sonderfall > greift) > >
> > zum einen nicht alle Arrayelemente mit dem Integerwert 0 > initialisieren - wenn überhaupt, nur das nullte - und zum anderen > vermutlich eine Warnung bringen, das die Anzahl der Elemente nicht > übereinstimmt. Aus ISO/IEC 9899:
[...which means zero-initialized...] Peter II schrieb: > Daniel A. schrieb: >> DirkB schrieb: >>> ... und da wird nur das erste Element mit '0' besetzt. Die restlichen >>> sechs werden mit 0 gefüllt. >> >> Aber nur im Globalen Scope. In Funktionen sind die Restlichen >> undefiniert. > > wie kommst du darauf? Ich hatte es mit der Initialisierung von Structs und Unions verwechselt: http://busybox.net/~landley/c99-draft.html#6.7.8
Aber bei Arrays habt ihr Recht:
Gast
#4374636
S. J. schrieb: > Klaus schrieb: >> ... >> Allerdings sollte (wenn ich mich nicht gerade irre oder irgendeine > Aus ISO/IEC 9899: Was soll ich machen? Auf die Kniee fallen? Hatte hier Beitrag "Re: Char Array in C mit '\0' deklarieren" doch schon geschrieben, dass ich was Falsches behauptete. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|