Forum: Mikrocontroller und Digitale Elektronik Abschlusselement in int und char Arrays


von Florian S. (sirius7)


Angehängte Dateien:

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

von Klaus (Gast)


Lesenswert?

Falsches Internet? Internet kaputt?

von H.Joachim S. (crazyhorse)


Lesenswert?

In arrays gibts kein Endezeichen.
Für die Einhaltung der Grenzen bist du selbst verantwortlich.

von Florian S. (sirius7)


Lesenswert?

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

von Klaus (Gast)


Lesenswert?

Ja. Und was ist jetzt mit Deinem Internet? Ist das so eine 
eingeschränkte Portalseite von nem Provider? Oder was ist das Problem?

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Karl H. (kbuchegg)


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.

von Karl H. (kbuchegg)


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.

von Florian S. (sirius7)


Lesenswert?

>
> Nochmal:
>
> Diese Konvention existiert nur im Zusammenhang mit Strings.

achso, jetzt ist es klar. vielen Dank! )

von Florian S. (sirius7)


Lesenswert?

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.

von Karl H. (kbuchegg)


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.

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
Noch kein Account? Hier anmelden.