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
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
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.
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
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";
Freddy schrieb:> 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.
du hast Franks Antwort genau gelesen?
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?
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.
Verstehnix schrieb:> gibt es so eine Möglichkeit?
Nicht in C.
Dann müstest du weg von der "String"-schreibweise und hin zur
'C','h','a','r','a','c','t','e','r'-schreibweise...
Ist es dir das wert?
EDIT: Pech, zweiter... ;-)
Rufus Τ. Firefly schrieb:> Wirklich sinnvoll aber ist es, die redundante Längenangabe einfach> wegzulassen:>> char stringarray[] = "Hallo";
Du hast mein Posting offenbar nicht bis zum Ende gelesen. Dieses war
extra didaktisch so aufgebaut, dass genau dieser Clou erst am Ende
kommt ;-)
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.