Problem mit char-Array

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
stampuhh
Beiträge: 211
Registriert: Sa Nov 07, 2009 4:39 pm
Wohnort: Paderborn

Problem mit char-Array

Beitrag von stampuhh » So Nov 08, 2009 6:36 pm

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
NachDenkSeiten.de

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Problem mit char-Array

Beitrag von nufan » So Nov 08, 2009 6:49 pm

Du musst den char-Array ordnungsgemäß beenden, indem du das letzte Zeichen auf '\0' setzt.

Code: Alles auswählen

sizeof(buf)/sizeof(buf[0]
Ich hätte ehrlich gesagt nicht gedacht, dass hier das gewünschte Ergebnis rauskommt... man lernt nie aus :)

Benutzeravatar
stampuhh
Beiträge: 211
Registriert: Sa Nov 07, 2009 4:39 pm
Wohnort: Paderborn

Re: Problem mit char-Array

Beitrag von stampuhh » So Nov 08, 2009 7:45 pm

omg... :roll: :oops:

danke^^

Wo du es sagst fällt es mir auch wieder ein, dass da doch was war. Aber nur so lernt man...

gruß stampuhh
NachDenkSeiten.de

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Problem mit char-Array

Beitrag von Xin » So Nov 08, 2009 10:23 pm

[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.

Code: Alles auswählen

    for(i = 0; i < breite; i++)
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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
stampuhh
Beiträge: 211
Registriert: Sa Nov 07, 2009 4:39 pm
Wohnort: Paderborn

Re: Problem mit char-Array

Beitrag von stampuhh » So Nov 08, 2009 10:38 pm

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
NachDenkSeiten.de

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Problem mit char-Array

Beitrag von Dirty Oerti » So Nov 08, 2009 11:21 pm

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.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
stampuhh
Beiträge: 211
Registriert: Sa Nov 07, 2009 4:39 pm
Wohnort: Paderborn

Re: Problem mit char-Array

Beitrag von stampuhh » So Nov 08, 2009 11:36 pm

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
NachDenkSeiten.de

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Problem mit char-Array

Beitrag von Xin » So Nov 08, 2009 11:49 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
stampuhh
Beiträge: 211
Registriert: Sa Nov 07, 2009 4:39 pm
Wohnort: Paderborn

Re: Problem mit char-Array

Beitrag von stampuhh » So Nov 08, 2009 11:52 pm

ja das hab ich gerade gemerkt ;)

int[10] liefert eine Größe von 10*4 Bytes und einen Segmention Fault.

gruß stampuhh
NachDenkSeiten.de

Antworten