Wie dynamisches Char-Array anlegen?
-
Er meint, dass du selbstverständlich das Array mit new[] anlegen, dann benutzen und wenn du's nicht mehr brauchst, mit delete[] zerstören musst. Also nicht seinen Code copy-pasten und im Anschluss das Array benutzen. Ich halte das einerseits schon für weit hergeholt (die Namensgebung der Schlüsselwörter ist ja eigentlich eindeutig), andererseits ist man hier im Forum schon einiges gewöhnt.

-
_matze schrieb:
Ich halte das einerseits schon für weit hergeholt ...
Ist es wirklich so weit hergeholt, wenn jemand sowas in einem Forum fragen muss? Jeder der C++ gelernt hat, weiss dies, da es absolute Grundlagen sind. Und wenn man sich nicht mehr ganz sicher ist, ist der Griff zum Buch meistens deutlich schneller, als extra in einem Forum nachfragen zu gehen.
Also ich weiss nicht, ich hatte da einfach leichte Befürchtungen ...

Grüssli
-
Ich vermisse hier den Hinweis, doch lieber:
vector<char> CharVektor(46);
zu benutzen ...
-
Oder
std::string strund dann einfach frei verwenden...
-
Ein logischer Verstand sollte eigentlich erkennen, dass delete[] höchstwahrscheinlich zum Löschen des Arrays führt. Das nicht jeder Verstand logisch denkt, beweisen jeden Tag zig Beiträge in diesem Forum, daher ist deine Befürchtung natürlich schon irgendwie gerechtfertigt.

-
_matze schrieb:
Er meint, dass du selbstverständlich das Array mit new[] anlegen, dann benutzen und wenn du's nicht mehr brauchst, mit delete[] zerstören musst. Also nicht seinen Code copy-pasten und im Anschluss das Array benutzen. Ich halte das einerseits schon für weit hergeholt (die Namensgebung der Schlüsselwörter ist ja eigentlich eindeutig), andererseits ist man hier im Forum schon einiges gewöhnt.

Naja, das hat ja nichts mehr mit C++-Programmierungsfaehigkeit zu tun. Eher mit Englischkenntnissen. Und dıe habe ich zumindest ausreichend..

-
Tachyon schrieb:
Oder
std::string strund dann einfach frei verwenden...Das ist aber etwas völlig anderes. In einem 'string' wird zB ein Byte mit dem Wert 0 bereits interpretiert.
-
skullyan schrieb:
Naja, das hat ja nichts mehr mit C++-Programmierungsfaehigkeit zu tun. Eher mit Englischkenntnissen. Und dıe habe ich zumindest ausreichend..

Naja, es gibt auch Leute die hätten enstprechende Englischkenntnisse und trotzdem würden sie den Fehler machen, weil sie einfach zu faul sind, selber zu überlegen und zum Beispiel genauer hinzuschauen oder selber nachschauen ...
Mir ist es eben ein Rätsel, dass man so eine grundsätzliche Frage in einem Forum stellt

Belli schrieb:
Das ist aber etwas völlig anderes. In einem 'string' wird zB ein Byte mit dem Wert 0 bereits interpretiert.
Würdest du das noch ein wenig genauer erläutern, was du hiermit meinst? Vor allem mit dem Ausdruck 'string'. Ich hoffe, dass du damit im allgemeinen eine Zeichenkette meinst und nicht den
std::string?
Und ob es in diesem Fall wirklich etwas völlig anderes ist, kann man schlecht beurteilen, da wir nicht wissen, was Skullyan mit dem Array machen will
Grüssli
-
Belli schrieb:
Tachyon schrieb:
Oder
std::string strund dann einfach frei verwenden...Das ist aber etwas völlig anderes. In einem 'string' wird zB ein Byte mit dem Wert 0 bereits interpretiert.
Dann nimm halt ein std::vector<char>
-
Dravere schrieb:
Belli schrieb:
Das ist aber etwas völlig anderes. In einem 'string' wird zB ein Byte mit dem Wert 0 bereits interpretiert.
Würdest du das noch ein wenig genauer erläutern, was du hiermit meinst? Vor allem mit dem Ausdruck 'string'. Ich hoffe, dass du damit im allgemeinen eine Zeichenkette meinst und nicht den
std::string?
Und ob es in diesem Fall wirklich etwas völlig anderes ist, kann man schlecht beurteilen, da wir nicht wissen, was Skullyan mit dem Array machen will
Ich meinte in der Tat den std::string - ich nahm nämlich an, daß ein string.push_back(0) nicht das gleiche macht, wie ein vector.push_back(0). Allerdings habe ich gerade getestet, und muß zu meiner Überraschung erkennen, daß ich mich geirrt habe.
string str; str.push_back(65); str.push_back(66); str.push_back(0); str.push_back(65); str.push_back(66); cout << "size of str: " << str.size() << endl; cout << str << endl;führt zu der Ausgabe:
size of str: 5
AB ABIch hatte erwartet, daß 0 als Ende des Strings interpretiert wird. Möglicherweise kann man also 'string' genau so wie 'vector' benutzen, solange man 'char' verwalten will.
-
Belli schrieb:
Ich hatte erwartet, daß 0 als Ende des Strings interpretiert wird. Möglicherweise kann man also 'string' genau so wie 'vector' benutzen, solange man 'char' verwalten will.
0 hat in einem
std::stringüberhaupt gar keine Bedeutung. Die Länge wird separat mitgeführt. Du musst halt einzig aufpassen, wenn du mit C Schnittstellen kommunizierst. Also wenn du über die Funktionc_streinen C String desstd::stringObjektes holst, dann hast du mehrere Nullen drin, was natürlich falsche Ergebnisse liefern kann.Genauso benutzen wie
std::vector<char>, würde ich aber mit einer Warnung verbinden.std::stringist natürlich auf Zeichenketten Benutzung optimiert, währendstd::vectorein Container für Elemente irgendeines Typs ist. Auch gibt es keine Garantien, dass der Speicher von einer Zeichenkette instd::stringan einem Stück sein muss, usw. usf.
Es gibt einige Unterschiede zwischenstd::stringundstd::vector, aber diese Unterschiede beziehen sich weniger auf die Elemente, welche sie halten, sondern sind ihre Funktionsweise an sich und ihren Einsatzzweck.Grüssli
-
Dravere schrieb:
Auch gibt es keine Garantien, dass der Speicher von einer Zeichenkette in
std::stringan einem Stück sein muss, usw. usf.Ist das beim vector anders? Immerhin kann ich bei beiden die Elemente mit dem []-Operator ansprechen, ich hätte auch hier erwartet, daß die Elemente am Stück im Speicher zu finden sind, aber naja, Implementationsdetails sollen ja transparent sein.
Daß es trotzdem Unterschiede zwischen vector<char> und string gibt, ist schon klar, auch, daß ich einen vector<char> nicht uneingeschränkt wie einen string nutzen kann, aber möglicherweise kann man einen string wie einen vector<char> benutzen?!
Egal - Ausgangspunkt dieser Subdiskussion war ja meine Aussage, daß vector<char> etwas anderes ist als string, im Detail bin ich dazu zwar auf Grund falscher Annahmen gekommen, aber letztendlich scheint sie ja zu stimmen.
Und daß man - wie Du weiter oben erwähnt hast - es natürlich vom konkreten Anwendungszweck abhängig machen muß, welchen Typ man benutzt, ist völlig unbestritten.
-
Dravere schrieb:
Auch gibt es keine Garantien, dass der Speicher von einer Zeichenkette in std::string an einem Stück sein muss, usw. usf.Ist das beim vector anders?
Ja, es ist beim std::vector garantiert dass der Speicher en- Block ist (seit dem Korrigendum 2003).
Simon