String in Array speichern --- Fehlermeldung komisch

Gast #2779676
Lesenswert?

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 #2779689
Lesenswert?

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) #2779697
Lesenswert?

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.
Persönliche Seite #2779707
Lesenswert?

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 #2779731
Lesenswert?

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 #2779742
Lesenswert?

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

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