String in Array speichern --- Fehlermeldung komisch

Gast #2779676
char stringarray[5] = "Hallo";

--> funktioniert (zumindest kein Compilerfehler)




char stringarray[5] = "Halloa";

--> funktioniert nicht!

Errorwarnung:
Error[Pe144]: a value of type "char [7]" cannot be used to initialize an
entity of type "char [5]"


Nun frage ich mich, wieso durch die Verlängerung meines Strings um einen 
Buchstaben, das Array plötzlich char[7] breit wäre, hingegen vorher ein 
char[5] gewesen ist...



klärt mich bitte auf.

mfg
Moderator Persönliche Seite
Verstehnix schrieb:
> char stringarray[5] = "Hallo";

Hier werden 5 Buchstaben ohne das abschließende '\0' gespeichert. Das 
ist halt in C so: Passen nur die Buchstaben, aber nicht mehr die 
Terminierung, dann wird die Terminierung halt weggelassen.

Ergo solltest Du hier besser stringarray[6] schreiben.

> char stringarray[5] = "Halloa";

hier muss der C-Compiler passen: 6 Buchstaben + '\0' als Terminator sind 
insgesamt 7 Zeichen. Die passen beileibe nicht in ein Array, was nur 5 
Zeichen aufnehmen kann.

Schreibe also

    char stringarray[7] = "Halloa";

Aber am besten schreibst Du:

    char stringarray[] = "Halloa";

Dann dimensioniert der Compiler das Array selbst.

Gruß,

Frank
(Firma: fritzler-avr.de)
Das Obere gibt zwar erstmal kein Fehler, aber wenn du den String 
weiternutzen willst obwohl er kein Nullzeichen als Terminierung hat gibt 
das die lustigsten Fehler.
Denn eine Stringverarbeitende Funktion arbeitet bis es ein Nullzeichen 
findet, hier wird dann solange durch dne Speicher geackert bis ein 
anderer String gefundne wird mit Nullzeichen.
Gast
Wenn "Hallo" ein char[5] ist, dann versteh ich auch nicht ganz, wieso 
"Halloa" ein char[7] sein soll. Wäre dann doch eigentlich ein char[6], 
da nur ein Character länger.

Komisch
Persönliche Seite
Frank M. schrieb:
>> char stringarray[5] = "Hallo";
>
> Hier werden 5 Buchstaben ohne das abschließende '\0' gespeichert. Das
> ist halt in C so: Passen nur die Buchstaben, aber nicht mehr die
> Terminierung, dann wird die Terminierung halt weggelassen.
>
> Ergo solltest Du hier besser stringarray[6] schreiben.


Wirklich sinnvoll aber ist es, die redundante Längenangabe einfach 
wegzulassen:

   char stringarray[] = "Hallo";
Gast
noch eine Anschlussfrage:

Gibt es eine Möglichkeit, eine String-Arraydeklaration durchzuführen, 
die zwar automatisch die Länge festsetzt, aber dabei ohne einen 
Nullterminator wirkt?

Also eine Zeile (sinngemäß):

stringarray[] = "String_und_nur_String_ohne_Nullterminator";



gibt es so eine Möglichkeit?
Persönliche Seite
Verstehnix schrieb:
> Gibt es eine Möglichkeit, eine String-Arraydeklaration durchzuführen,
> die zwar automatisch die Länge festsetzt, aber dabei ohne einen
> Nullterminator wirkt?
>
> Also eine Zeile (sinngemäß):
>
> stringarray[] = "String_und_nur_String_ohne_Nullterminator";

Ja, wenn man nicht mit einer Stringkonstanten, sondern einzelnen 
Zeichen initialisiert:

  char stringarray[] = { 'S', 't', 'r', 'i', 'n', 'g' };

Jedes andere Array beliebigen anderen Typs funktioniert auch so.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 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.