Abschlusselement in int und char Arrays

OP #4399099
Lesenswert?
• ▲
▼
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
Angehängte Dateien:
Persönliche Seite #4399122
Lesenswert?
• ▲
▼
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.
#4399149
Lesenswert?
• ▲
▼
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.
#4399154
Lesenswert?
• ▲
▼
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.
#4399406
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.