Seite 1 von 2

Programm liefert keine Ausgabe

Verfasst: Mi Jan 04, 2012 6:58 pm
von DANrulz81
Hallo zusammen,

bei folgendem Code bekomm ich keine Ausgabe:

Code: Alles auswählen

#include <stdio.h>

int main(void)
{
    int i;
    char buchstabe[]="Das ist ein Test";
    char *zeiger=NULL;
    char ende='\0';

    zeiger=&buchstabe[0];

    for(i=0;i!=ende;i++)
        printf("\nBuchstabe %2i:\t %c",i+1,*zeiger++);
    return 0;
}
Wenn ich für i eine Zahl einsetze klappt das, ich möchte aber alles ausgeben, bis das Stringende (\0) erreicht ist. Irgendwie komm ich nicht drauf, wahrscheinlich hab ich heute zuviel gemacht :?

Re: Programm liefert keine Ausgabe

Verfasst: Mi Jan 04, 2012 7:24 pm
von Bebu
Schau dir mal die for- Schleife noch mal ganz genau an. Tip1: Buchstabe ist nicht terminiert. Tip2 Was hat Buchstabe mit Ende zu tun?

Re: Programm liefert keine Ausgabe

Verfasst: Mi Jan 04, 2012 7:34 pm
von DANrulz81
Bebu, danke für die Hinweise. Allerdings kann ich die nicht ganz nachvollziehen. Das Programm liefert mir meine gewünschte Ausgabe, wenn ich für

Code: Alles auswählen

char ende=16;
Ich möchte ja nur den String solange darstellen, bis dieser zu Ende ist "\0". Irgendwie habe ich das Gefühl, wir reden an einander vorbei. Oder ich hab jetzt wirklich nen Hänger vom ganzen Programmieren heute :shock:

Re: Programm liefert keine Ausgabe

Verfasst: Mi Jan 04, 2012 8:13 pm
von nufan
Bebu hat geschrieben:Schau dir mal die for- Schleife noch mal ganz genau an.
Sehr guter Tipp ^^
Bebu hat geschrieben:Tip1: Buchstabe ist nicht terminiert.
Doch, das macht der Compiler automatisch.
Bebu hat geschrieben:Tip2 Was hat Buchstabe mit Ende zu tun?
Wieder ein guter Tipp ^^

@DANrulz81: Denk nach was '\0' ist und welchen Wert es hat. Überlege den Unterschied zwischen 'i' und 'Buchstabe'. Dann geh die Schleife Schritt für Schritt durch... oder auch nicht ^^ Falls du es dann noch nicht verstehst, starte das Programm mit dem Debugger und geh es Schritt für Schritt durch.

Re: Programm liefert keine Ausgabe

Verfasst: Mi Jan 04, 2012 8:50 pm
von DANrulz81
O.k. Vielen Dank, das war wohl doch zuviel heute. So funktioniert mein Programm:

Code: Alles auswählen

#include <stdio.h>

int main(void)
{
    int i;
    char buchstabe[]="Das ist ein Test, der soll zum Testen sein";
    char *zeiger=NULL;
    char ende='\0';

    zeiger=&buchstabe[0];

    for(i=0;*zeiger!=ende;i++)
        printf("\nBuchstabe %2i:\t %c\tAdresse: %p",i+1,*zeiger++,zeiger);
    return 0;
}
Ich hoffe, dass das so in Ordnung ist.

Edit: Das mit dem Debuggen würde ich gerne machen, allerdings steige ich bei Code::Blocks nicht so ganz durch, wie das gehen soll. :?:

Re: Programm liefert keine Ausgabe

Verfasst: Mi Jan 04, 2012 8:56 pm
von Bebu
Ja, das Programm sieht fast gut aus. Du könntest dir allerdings den char ende auch noch sparen...
dani93 hat geschrieben:Doch, das macht der Compiler automatisch.
Mhh, danke, das wusste ich gar nicht. Aber ich arbeite auch so gut wie nie mit C-Strings.

Re: Programm liefert keine Ausgabe

Verfasst: Mi Jan 04, 2012 8:58 pm
von nufan
DANrulz81 hat geschrieben:

Code: Alles auswählen

    for(i=0;*zeiger!=ende;i++)
        printf("\nBuchstabe %2i:\t %c\tAdresse: %p",i+1,*zeiger++,zeiger);
Von solchen Operationen rate ich stark ab. Das Ergebnis ist soweit ich weiß undefiniert, auf jeden Fall ist es falsch. 'zeiger' zeigt bei der 2. Verwendung im printf() nämlich schon auf die nächste Adresse, nicht jene die ausgegeben wurde. Einfacher ist es hier mit 'i' als Index zu arbeiten, dafür hast du die Variable ja auch.
Aber du hast schon mal erkannt wo der Fehler liegt, sehr gut :)
Bebu hat geschrieben:
dani93 hat geschrieben:Doch, das macht der Compiler automatisch.
Mhh, danke, das wusste ich gar nicht. Aber ich arbeite auch so gut wie nie mit C-Strings.
Ist irgendwie logisch, sonst müsste man sogar bei einem printf() die Länge mit angeben:

Code: Alles auswählen

printf( "test-ausgabe" );
Woher sollte printf() ohne \0 wissen wo der String aus ist?

EDIT:
DANrulz81 hat geschrieben:Edit: Das mit dem Debuggen würde ich gerne machen, allerdings steige ich bei Code::Blocks nicht so ganz durch, wie das gehen soll. :?:
Du setzt einen Breakpoint (klick rechts neben eine Zeilennummer) und startest das Programm im Debug-Modus (Debug -> Start). Danach kannst du es mit "Next Instruction" Schritt für Schritt abarbeiten.

Re: Programm liefert keine Ausgabe

Verfasst: Mi Jan 04, 2012 9:34 pm
von DANrulz81
@dani93:
Super, vielen Dank, allerdings funktioniert das nur, wenn ich es als Projekt bearbeite. Ich öffne immer nur ein File.

Code: Alles auswählen

for(i=0;*zeiger!=ende;i++)
        printf("\nBuchstabe %2i:\t %c\tAdresse: %p",i+1,*zeiger++,zeiger);
Den Zeiger zum Schluss hatte ich nur zu Testzwecken drin.

Code: Alles auswählen

for(i=0;*zeiger!=ende;i++)
        printf("\nBuchstabe %2i:\t %c\tAdresse: %p",i+1,*zeiger++);
So sieht es jetzt aus.

Re: Programm liefert keine Ausgabe

Verfasst: Mi Jan 04, 2012 9:38 pm
von nufan
DANrulz81 hat geschrieben:Super, vielen Dank, allerdings funktioniert das nur, wenn ich es als Projekt bearbeite. Ich öffne immer nur ein File.
Hm... möglich, so gut kenne ich CodeBlocks auch wieder nicht :)
DANrulz81 hat geschrieben:

Code: Alles auswählen

for(i=0;*zeiger!=ende;i++)
        printf("\nBuchstabe %2i:\t %c\tAdresse: %p",i+1,*zeiger++);
So sieht es jetzt aus.
Sollte passen, bis auf das überflüssige (und dadurch nicht ungefährliche) %p :) Schöner finde ich aber folgende Lösung:

Code: Alles auswählen

for( i = 0; zeiger[i] != '\0'; i++ )
  printf( "\nBuchstabe %2i:\t %c", i + 1, zeiger[i] );

Re: Programm liefert keine Ausgabe

Verfasst: Mi Jan 04, 2012 9:43 pm
von DANrulz81
O.k. Danke. Aber ich lasse es lieber so, da ich da so noch besser durchsteige. So lange programmiere ich noch nicht C.