Forum: Compiler & IDEs string korrekt ansprechen


von flyingwolf (Gast)


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]?

von Rufus Τ. F. (rufus) Benutzerseite


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

von flyingwolf (Gast)


Lesenswert?

das erklärt einiges ...

von Patrick D. (oldbug) Benutzerseite


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.

von Patrick D. (oldbug) Benutzerseite


Lesenswert?

Zu langsam getippt, mist...

von flyingwolf (Gast)


Lesenswert?

@OldBug
trotzdem danke

von Rolf Magnus (Gast)


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";

von flyingwolf (Gast)


Lesenswert?

Is ja gigantisch. Es funktioniert.

von flyingwolf (Gast)


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?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nein, '\0' ist 0x00 (Null).
0x0d ist CR (Zeilenrücklauf).

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.