mikrocontroller.net

Forum: Compiler & IDEs string korrekt ansprechen


Autor: flyingwolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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]?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: flyingwolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das erklärt einiges ...

Autor: Patrick Dohmen (oldbug) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Patrick Dohmen (oldbug) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zu langsam getippt, mist...

Autor: flyingwolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@OldBug
trotzdem danke

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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";

Autor: flyingwolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Is ja gigantisch. Es funktioniert.

Autor: flyingwolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.