Seite 1 von 1
Problem mit char-Array
Verfasst: So Nov 08, 2009 6:36 pm
von stampuhh
Hallo zusammen,
ich bin ein bisschen am Ausprobieren und bin dabei auf ein Problem gestoßen. Und zwar habe ich folgendes:
Code: Alles auswählen
int test1, test2, test3, test4, test5;
int breite = 3;
char buf[breite];
for(i = 0; i < sizeof(buf)/sizeof(buf[0]); i++)
{
buf[i] = 'z';
}
printf("%s\n",buf);
und selbige Version mit einer kleinen Änderung
Code: Alles auswählen
int test1, test2, test3, test4;
int breite = 3;
char buf[breite];
for(i = 0; i <sizeof(buf)/sizeof(buf[0]); i++)
{
buf[i] = 'z';
}
printf("%s\n",buf);
Ersteres liefert mir hinter der Folge von 'z's ein paar kryptische Zeichen. Zweites Beispiel funktioniert wie gewollt. Also eine Variable mehr erzeugt "Müll" auf der Ausgabe?
Ich kann mir das jetzt ehrlich gesagt nicht erklären warum das so sein sollte
gruß stampuhh
Re: Problem mit char-Array
Verfasst: So Nov 08, 2009 6:49 pm
von nufan
Du musst den char-Array ordnungsgemäß beenden, indem du das letzte Zeichen auf '\0' setzt.
Ich hätte ehrlich gesagt nicht gedacht, dass hier das gewünschte Ergebnis rauskommt... man lernt nie aus

Re: Problem mit char-Array
Verfasst: So Nov 08, 2009 7:45 pm
von stampuhh
omg...
danke^^
Wo du es sagst fällt es mir auch wieder ein, dass da doch was war. Aber nur so lernt man...
gruß stampuhh
Re: Problem mit char-Array
Verfasst: So Nov 08, 2009 10:23 pm
von Xin
[quote="stampuhh"]
Code: Alles auswählen
int breite = 3;
char buf[breite];
for(i = 0; i < sizeof(buf)/sizeof(buf[0]); i++)
sizeof( buf ) ist drei, weil das Array ja 3 Byte groß ist.
Ein Element des drei Byte großen Arrays ist 1 Byte groß: 3 / 1 ist 3.
Das wird pro Schleifendurchlauf neu berechnet.
Dabei ist das Array 3 Byte groß, weil Du es drei Byte groß haben wolltest.
Hier wird auf die Division verzichtet, stattdessen wird auf die Variable zugegriffen und fertig - und man kann es lesen.
Ansonsten liegt Dani93 mit dem Null-Byte am Ende des Arrays richtig. Beachte, dass das Array von 0 bis (breite-1) geht, also buf[ breite - 1 ] = '\0'; setzen.
Re: Problem mit char-Array
Verfasst: So Nov 08, 2009 10:38 pm
von stampuhh
Danke noch mal für die Erklärung.
Ich werde das jetzt direkt mit "breite" schreiben. Ich hatte nur irgendwo gelesen, dass das was ich da stehen habe flexibler sein soll, falls sich mal irgendetwas ändert. Aber in diesem Zusammenhang ist dein Vorschlag der Beste, denn die Variable "breite" bekomme ich im Funktionsaufruf übergeben.
gruß stampuhh
Re: Problem mit char-Array
Verfasst: So Nov 08, 2009 11:21 pm
von Dirty Oerti
Da hast du schon recht, dein Code ist "flexibler".
Da sich die Größe deines Arrays zur Laufzeit aber nicht verändert kannst du ohne dich iwie schämen zu müssen mit konstanten Werten arbeiten

Das Teilen durch die Größe deines Arrayelements ist aber auf jedenfall unnötig, diese Größe wird beim Kompilieren nämlich festgelegt.
Re: Problem mit char-Array
Verfasst: So Nov 08, 2009 11:36 pm
von stampuhh
du meinst ein sizeof(array) würde ggf. ausreichen?
Edit: gerade schnell selber getestet. Wenn ich nicht irgendwas falsch gemacht habe dann geht es nicht
gruß stampuhh
Re: Problem mit char-Array
Verfasst: So Nov 08, 2009 11:49 pm
von Xin
stampuhh hat geschrieben:du meinst ein sizeof(array) würde ggf. ausreichen?
Das geht hier - aaaaber wenn Du int[3] verwendest, dann ist das nicht 3 groß, sondern 3*4 Byte = 12 Byte....
Darum teilt der Mensch, der Dir das beibringt nochmal durch die Größe des Typs: 12/4 = 3.
Re: Problem mit char-Array
Verfasst: So Nov 08, 2009 11:52 pm
von stampuhh
ja das hab ich gerade gemerkt
int[10] liefert eine Größe von 10*4 Bytes und einen Segmention Fault.
gruß stampuhh