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 ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.