Hallo, ich habe einen String Global deklariert. zB.: char STRING[100]= "HALLO"; geht ja auch so. wenn ich zur laufzeit den String ändern möchte wie geht das? zB.: STRING[]= "HALLO HILFE";=> syntax error danke an die C spezialisten
ah, danke aber warum ist in C denn keine einfache zuweisung von Strings möglich? warum geht das nur bei der Initialisierung?
Bin zwar kein C-Spezialist mehr, aber wenn "STRING" mal kein reserviertes Wort ist!!!??? Wie wärs z.b. mit "S_1" "S_Text1" "S_tralala" oder sowas!? hmh und dann...direkt zuweisen geht bei C auch nicht, soweit ich mich erinnere, also mußt strcopy verwenden, wie Marco schon schrieb. Tja das ist halt C, in Basic geht´s einfach so: S_1 = "Hallo" und in Pascal ähnlich einfach. Auch ein Grund nix mehr in C zu machen lol lg Ralf
> zB.: char STRING[100]= "HALLO"; > zB.: STRING[]= "HALLO HILFE";=> syntax error const char* STRING = "HALLO"; ... STRING = "HALLO HILFE"; > aber warum ist in C denn keine einfache zuweisung von Strings > möglich? Weil es in C keinen Datentyp für Strings gibt. Man kann nur entweder mit Arrays aus char arbeiten oder mit Zeigern auf char. Und Arrays kann man sowieso nicht zuweisen. > warum geht das nur bei der Initialisierung? Weil es eben eine Initialisierung und keine Zuweisung ist.
> Bin zwar kein C-Spezialist mehr, aber wenn "STRING" mal kein > reserviertes Wort ist!!!??? Ist es nicht. Allerdings werden Identifier, die nur aus Großbuchataben bestehen nach Konvention normalerweise nur für Makros verwendet. string wäre aber ein reserviertes Wort. > Wie wärs z.b. mit "S_1" "S_Text1" "S_tralala" oder sowas!? Sieht hässlich aus, finde ich. Ist aber Geschmackssache. > Auch ein Grund nix mehr in C zu machen lol Oder ein Grund, sich in C besser einzuarbeiten, um es zu verstehen. PS: Deine !- und ?-Tasten scheinen manchmal zu prellen.
laßt uns wieder mal über die beste programmiersprache streiten http://www2.informatik.unihalle.de/lehre/pascal/sprache/humor_ix.html
<offtopic> ich will mit streiten :-) http://www.bernd-leitenberger.de/echte-programmierer.html </offtopic>
Frage zum Beispiel von Rolf Magnus: " const char* STRING = "HALLO"; ... STRING = "HALLO HILFE"; " Wenn ich das richtig verstehe, wird ein Pointer statt eines char-Arrays deklariert/definiert. Somit brauch man nicht strcpy() oder so. Warum steht "const" davor? Wie stelle ich (oder der Compiler) sicher, daß der String "HALLO HILFE" nicht andere Variablen überschreibt, er hätte ja vom UART kommen (siehe Bsp. unten) können mit unbekannter Textlänge zur compilezeit? Legt AVR-gcc "const char* STRING = "HALLO";" in den RAM oder FLASH? Bsp. ... char c; While( (c=hole_zeichen_von_UART()) != '\n' ) *STRING++ = c; ... Danke - Michael
@Michael, Du mußt Dir unbedingt nochmal den Unterschied zwischen Pointer und Array klarmachen. const char* STRING = "HALLO"; legt ein Array an, wo "HALLO" reinpaßt, d.h. das 6 Byte groß ist. Und dann den Pointer STRING und setzt ihn auf das Array. "const" sagt dann nur noch, daß Schreibzugriffe verboten sind, d.h. "*STRING++ = c;" ergibt gnadenlos ne Fehlermeldung. Abgesehen davon ist STRING++ sehr gefährlich, da damit die eigentliche Startadresse des Arrays verloren geht. Ist aber durchaus möglich, wenn das Array während der gesamten Laufzeit nur ein einziges mal benötigt wird. Peter
> Warum steht "const" davor? Weil das, worauf er zeigt, nach C-Norm konstant ist und nicht beschrieben werden darf. > Wie stelle ich (oder der Compiler) sicher, daß der String "HALLO > HILFE" nicht andere Variablen überschreibt, er hätte ja vom UART > kommen (siehe Bsp. unten) können mit unbekannter Textlänge zur > compilezeit? Wenn du ihn explizit in den Source Code schreibst, hätte er nicht vom UART kommen können. Wenn du einen String vom UART lesen willst, mußt du es anders machen. String-Handling ist nicht gerade eine Stärke von C. Bei unbekannter Textlänge müßtest du z.B. ein Array anlegen, das groß genug ist, damit der Text reinpasst. > Legt AVR-gcc "const char* STRING = > "HALLO";" in den RAM oder FLASH? Den Zeiger legt er im RAM ab. Was das Stringliteral, auf das er zeigt, angeht, hängt es primär von der Architektur ab. Im Prinzip würde Flash reichen, denn der Text ist ja eh nur lesbar. Aber bei Harvard-Architekturen wie z.B AVR, bei denen RAM und Flash unterschiedlich angesprochen werden, geht das so nicht. Einerseits muß das "HALLO" beim Einschalten irgendwo herkommen (also Flash), andererseits kann ein normaler Zeiger nicht auf den Flash zeigen. Also wird beim Start das "HALLO" ins RAM kopiert.
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.