C++ Array Zuweisung

Code:
char satz[30] = "Hallo Welt";

Wieso geht das Problemlos ? Also wenn man dem Array gleich am Anfang einen Wert zuweist.

Code:
char satz[30];
    satz = "Hallo Welt";
Und das hier klappt nicht, nur wenn man einen Index anwählt und dann aber auch nur ein Char zuweist.

Fehler:
Code:
 incompatible types in assignment of `const char[11]' to `char[30]'
Ok Inkompatible Zuweisung aber das bringt mich nicht weiter -.-

Kann es sein das man einem Array nur gleich beim deklarieren einen String zuweisen kann ?


MfG
 
Und das hier klappt nicht, nur wenn man einen Index anwählt und dann aber auch nur ein Char zuweist.

Ist nun einmal C/Cpp :D
Du kannst den String entweder bei der Deklaration gleich zuweisen (dein Codebsp. 1); später geht das leider nicht mehr so einfach. Dann musst du entweder Zeichen für Zeichen:
Code:
satz[0] = 'H';
satz[1] = 'a';
satz[2] = 'l';
usw...

oder du kannst es auch über eine Stringfunktion machen. Stichwort: strcpy
 
der punkt ist wenn du es zusammenhängend ins aray schreibst kriegt jedes zeichen einen platzt im array da das array ja aus char variablen besteht die nur EINEN buchstaben aufnehmen können.
willst du dir das nicht antun einfach strings nehmen
 
Jo klar mit Strings hat man dieses Problem nicht aber ich lese gerade das Buch
"C++ für Spieleentwickler" und dadrin werden die Strings eher weniger Benutzt.
Ich habe auch das Gefühl dass geübte Programmierer eher auf Char Arrays zurückgreifen als auf die String Library , kann das sein oder irre ich mich da ?
 
Die Pointer Arrythmetik (worauf auch dein char-Problem mehr oder minder zurückzuführen ist) ist etwas, für das die Einen c/cpp hassen und die Anderen es lieben. Geübte Programmierer benutzen es lieber, weil man bei denen mehr spielereien machen kann. Man könnte selbst verwaltungsroutinen für Zeichenketten machen etc.
Denn: Alles was Strings können, kann man mit char arrays auch machen. Nur nicht so einfach...
Da Strings zu string.h gehören und somit in einer fertigen Lib sind, geht das dort nicht (naja, vieleicht schon...). Aber ich benutze auch lieber Strings, weil es sich für kleinere, schnell gecodete Programme sich meiner Meinung nach nicht lohnt, sich mit char arrays rumzuplagen. ^^
 
Ich habe auch das Gefühl dass geübte Programmierer eher auf Char Arrays zurückgreifen als auf die String Library , kann das sein oder irre ich mich da ?
Die String Libary hat, je nach Implementation, einen Overhead. Logischerweise ist ein Array immer die schnellste und kleinste mögliche Methode. Freiwillig würde ich aber std::string immer dem Vorzug geben, da ist mir ein Array doch zu spartanisch ;)
 
kann mich dem auch nur anschließen. ich benutzte auch strings, allerdings die c++ libary.

wenn man nämlich ein string eingelesen hat, kann man dann anschließend diesen string wie ein array behandeln. beispiel:

string x;
x = "Hallo"
dann ist:

x[0]="H"
x[1]="a"
....ect....

wenn man aber eine ganze zeile einlesen will, benutzt man (ich) gerne getline(cin, x) (bin mir jetzt beim syntax ned sicher.
achso, wenn man die länge der zeichenkette ermitteln will, dann kann man z.B. ne schleife bis "\0" machen. also bis das programm dieses zeichen findet, denn das ist das ende eines strings...
"Hallo\0" so wirds eingentlich gespeichert, du siehst aber nur "Hallo".
gibt auch andere möglichkeiten (getlenght oder so...) aber wenn man mit getline arbeitet dann funtzt das GLAUBE ich ned so... erm ich hoffe diese relativ schlechte erklärung hat geholfen :D
 
Ich habe auch das Gefühl dass geübte Programmierer eher auf Char Arrays zurückgreifen als auf die String Library , kann das sein oder irre ich mich da ?
Die sind eher zu faul, sich damit zu beschäftigen und dann wird eben schon bei einfachen Sachen mit Pointern herumgeschossen und irgendwelche Overflows ermöglicht - und als Argument muss immer die angebliche Perfomance herhalten ;).

Nur in wenigen, speziellen Fällen, wenn wirklich Massen an Strings anfallen, können eigene Konzepte wirklich etwas bringen - solange das Programm aber 99% der Zeit entweder auf den User oder Festplatte wartet, ist es imho überflüssig, sich mit char-Arrays und Low-Level Tricks zu versuchen ins eigene Bein zu schießen. Und dann sollte man wiederum erstmal bei den Datenstrukturen anfangen zu optimieren (Stichwort: Suffix/PATRICIA Bäume).

PS: es ist zwar spaßig und durchaus lehrreich, die meisten Stringoperationen mal selber im Low-Level umzusetzen (und dabei meine ich nicht C ;) ) - aber diese immer zu benutzen ?
Man muss nur bedenken, dass die Libs i.R gut ausgetestet sind - zumindest um Faktoren mehr, als eigene Lösungen, bei denen man doch irgendann irgendwas übersieht.
 
Zurück
Oben