Hallo liebe Community, ich beschäftige mich mit Arrays und prüfe nun wie das mit dem letzten Element des Array '\0' aussieht. Dafür habe ich im Programm ein Array erstellt und versuche mit der do/while Schleife alle Elemente auszulesen. Dabei deklariere ich den Array einmal als char und einmal als int. Die Abbruchbedingung, wenn Compiler auf den letzten Element des Arrays stößt (while (*ptr !=0);) Nun sehe ich, dass wenn Array als char deklariert ist, funktioniert es ganz prima und alle Elemente werden ordnungsgemäß ausgegeben und nach dem letzten Element wird die Ausgabe abgebrochen. Wenn Array aber als int deklariert ist, wird nach dem letzten Element eine willkürliche Zahl (oder vielleicht eine Ram-Adresse) ausgegeben, was ich hier eigentlich nicht erwartet habe. Habe leider nirgendwo im Internet gefunden, womit das zu tun haben könnte und bitte daher um Ihre Hilfe. vielen Dank im Voraus
In arrays gibts kein Endezeichen. Für die Einhaltung der Grenzen bist du selbst verantwortlich.
H.Joachim S. schrieb: > In arrays gibts kein Endezeichen. > Für die Einhaltung der Grenzen bist du selbst verantwortlich. hmm, ich glaube da war was mit \0 der am Ende eines Array automatisch eingefügt werden soll, aber wie gesagt, finde nichts dazu im Internet (( außerdem funktioniert das bei mir mit char - Array
Ja. Und was ist jetzt mit Deinem Internet? Ist das so eine eingeschränkte Portalseite von nem Provider? Oder was ist das Problem?
Alex S. schrieb: > hmm, ich glaube da war was mit \0 der am Ende eines Array automatisch > eingefügt werden soll, aber wie gesagt, finde nichts dazu im Internet (( Nein. Das gibt es nicht. Das Zeichen \0 wird nur dann verwendet, wenn ein char-Array als String (Zeichenkette) genutzt wird. Automatisch wird es auch nur dann eingefügt, wenn eine Stringkonstante, also von Anführungszeichen umschlossener Text zur Initialisierung des Arrays verwendet wird:
1 | char einarray[3] = { 'a', 'b', 'c' }; |
2 | |
3 | char nocheinarray[6] = "Hallo"; |
4 | |
5 | char anderesarray[] = "Text"; |
Das erste Array enthält genau drei Elemente und kein "Abschlusszeichen", denn die Initialisierung erfolgt hier mit drei einzelnen char -Konstanten und nicht einer Stringkonstanten. Das zweite und dritte Array werden mit einer Stringkonstante initalisiert, im ersten Fall mit einer expliziten Längenangabe ("Hallo" sind fünf Zeichen, also wird Platz für sechs Arrayelemente benötigt, damit das abschließende '\0' auch noch unterkommt), und im zweiten Fall mit einer impliziten Längenangabe; der Compiler kann nämlich selber zählen. Dieses Array enthält fünf Arrayelemente, die vier Zeichen "Text" und wieder die abschließende '\0'. Nochmal: Diese Konvention existiert nur im Zusammenhang mit Strings.
Rufus Τ. F. schrieb: > Automatisch > wird es auch nur dann eingefügt, wenn eine Stringkonstante, also von > Anführungszeichen umschlossener Text zur Initialisierung des Arrays > verwendet wird: Genau genommen passiert das genau deswegen, weil eine Stringkonstante in einem C Programm immer ein abschliessendes \0 Zeichen hat. D.h. im Prinzip hat das mit dem Array an sich überhaupt nichts zu tun, sondern das \0 Zeichen ist ganz einfach Teil der Stringkonstante. Bei der Initialisierung wird es dann mitkopiert (die Ausnahme lass ich jetzt mal weg), eben weil es Teil der zur Initialisierung benutzten String-Konstante ist.
Alex S. schrieb: > Habe leider nirgendwo im Internet gefunden Das Problem ist, dass du eigentlich ein ordentliches Buch haben solltest, mit dem du lernst was es damit, und mit noch vielen tausend anderen Dingen, auf sich hat. Nicht umsonst hat ein ordtliches C-Lehrbuch einen gewissen Mindestumfang. Der ist nicht deswegen vorhanden, damit die Seiten voll werden, sondern weil es eben viele Dinge gibt, die man wissen muss.
> > Nochmal: > > Diese Konvention existiert nur im Zusammenhang mit Strings. achso, jetzt ist es klar. vielen Dank! )
Hallo Karl, ich habe auch im Buch gesucht, aber nichts unter Array gefunden. Jetzt ist mir klar, ich sollte unter "Strings" schauen. Vielen Dank noch mal für Eure Hilfe.
Alex S. schrieb: > Hallo Karl, > > ich habe auch im Buch gesucht, aber nichts unter Array gefunden. Jetzt > ist mir klar, ich sollte unter "Strings" schauen. ? Du solltest dein Buch systematisch von vorne nach hinten durcharbeiten. Es ist nicht so, dass in Programmiersprachen alles für sich alleine betrachtet werden kann. Da gibt es Querverbindungen und gerade am Anfang scheint irgendwie alles mit allem irgendwie zusammen zu hängen. Darum ist es so wichtig, dass man die Dinge richtig einordnen kann. Wobei zugegebenermassen gerade am Anfang ziemlich viel auf einmal über einen hereinbricht und man das Gefühl hat, irgendwie sollte man alles gleichzeitig lernen. Was natürlich nicht geht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.