string korrekt ansprechen

Gast #237606
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
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
>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
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
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

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.