string korrekt ansprechen

Gast #237606
Lesenswert?
• ▲
▼
Hallo Leute,

ich habe hier noch ein paar kleinere Probleme mit meinen Zeichenketten
und mich überkommt der Verdacht, dass ich was elemntares falsch mache.


Frage 1:
Ist das als Initialisierung korrekt?

char irgendwas[8] = "00000000"

Nun die elementare Frage
ist das erste Zeichen irgendwas[0] oder irgendwas[1]?
Persönliche Seite #237607
Lesenswert?
• ▲
▼
Die Initialisierung ist nicht korrekt.

Vom fehlenden Semikolon abgesehen wird der String mit einem Zeichen
zuviel initialisiert - bei Stringlängen muss immer der Platz für die
abschließende '\0' berücksichtigt werden. Deine Stringkonstante ist
acht Zeichen lang, daher muss das Array Platz für 9 Zeichen bieten.

Also:

   char sonstwas[9] = "00000000";

Das erste Element eines Arrays hat in C oder C++ immer den Index 0.


Literaturhinweis:

Kernighan & Ritchie, Programmieren in C, zweite Auflage, Hanser Verlag
Persönliche Seite #237609
Lesenswert?
• ▲
▼
>Frage 1:
>Ist das als Initialisierung korrekt?
>
>char irgendwas[8] = "00000000"

Nein!
Umfassende "Gänsefüßchen" markieren den Inhalt als String, dessen
Endekennung eine anhängende '0' (0x00) ist. In einem Feld mit 8
Elementen stehen Dir also nur 7 für den eigentlichen Inhalt bereit.
Bedenke, daß in Deinem Fall nicht x mal 0x00 in diesem String enthalten
ist, sondern x mal 0x30, was dem ASCII-Zeichen '0' entspricht.

>Nun die elementare Frage
>ist das erste Zeichen irgendwas[0] oder irgendwas[1]?

Das Feld beginnt mit dem Index [0], was auch 'irgendwas + 0'
entsprechen würde. Der Index [1] würde demzufolge 'irgendwas +
sizeof(type)' entsprechen.
Gast #237612
Lesenswert?
• ▲
▼
Es ist durchaus ok, den String so zu initialisieren, wenn man das
abschließende \0 nicht braucht. Das ist in C ausdrücklich so eralubt.
Meistens braucht man das \0 aber. Am einfachsten ist es, die Größe
einfach wegzulassen. Der Compiler setzt dann autmatisch das richtige
ein:

char irgendwas[] = "00000000";
Gast #237614
Lesenswert?
• ▲
▼
Noch eine abschließende Frage:
'\0' ist ja wohl nur ein Zeichen und '\0' die normierte
Umschreibung für ewas, was sich im geschriebenen Zeichensatz nicht
darstellen läßt oder anderweitig verwendet wird.
Ist '\0' zufällig #13 oder 0x0d?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren