Frage zum Füllen eines Char-Arrays - habe einen Fehler
-
Vergiß das delete[] nicht...
-
Caligulaminus schrieb:
Vergiß das delete[] nicht...
Hallo,
guter Hinweis. Danke.
Gruß
STBase
-
stbase schrieb:
Hallo,
Vielen lieben Dank - das war es gewesen.
Die Textzeilen der Textdatei lese ich in den Vector ein - da ich nicht weiß, wieviele Zeilen die Textdatei enthält.
Das Zerlegen der eingelesenen Textzeilen mache ich mit strtok. Aber strtok benötigt ein Char-Array, deswegen kopiere ich es.
Ich denke, das ganze geht auch einfacher, aber ich lerne ja noch (quasi learning by doing) - und ich habe hier im Forum schon einiges durch lesen gelernt.Gruß
STBaseps: gern kann ich heute Abend auch den ganzen Quellcode posten.
Leitfaden:
- Benutzt du new für Arrays ist das fast immer falsch.
- Benutzt du Funktionen aus cstring/string.h ist das fast immer falsch (hier hast du vergessen cstring einzubinden, obwohl du strcpy benutzt!)
- Benutzt du char-Arrays für Zeichenketten ist das fast immer falsch
- Das "fast immer" in diesen Aussagen ist als "immer" zu verstehen, außer du konstruierst mit Gewalt ein Gegenbeispiel, bei dem es vielleicht einen winzigkleinen Vorteil gibt.P.S.: void main ist immer falsch.
-
Tausche gerne ein "ungeschickt" gegen ein "falsch"

-
Swordfish schrieb:
Tausche gerne ein "ungeschickt" gegen ein "falsch"

Technisch gesehen ja, aber so merkt er es sich hoffentlich besser
. Und void main ist falsch.
-
stbase schrieb:
Aber strtok benötigt ein Char-Array, deswegen kopiere ich es.
Nein, strtok benötigt einen Pointer auf ein char-Array, und da std::vector garantiert die Elemente intern in so einem Array verwaltet, darfst du strok gerne den Pointer auf das erste Element des vector übergeben:
vec.data()(in C++11) bzw.&vec[0]in C++03. Das Einzige worauf du aufpassen musst ist, dass du auch den Nulldelimiter im vector hast.
-
Hallo,
vielen Dank für die Antworten. Dadurch kommt man auf ganz neue Ideen.
Ich werde mir mal die Vectoren genau ansehen und das ganze ohne den Umweg über das Char-Array zu lösen.Gruß
STBase
-
pumuckl schrieb:
stbase schrieb:
Aber strtok benötigt ein Char-Array, deswegen kopiere ich es.
Nein, strtok benötigt einen Pointer auf ein char-Array, und da std::vector garantiert die Elemente intern in so einem Array verwaltet, darfst du strok gerne den Pointer auf das erste Element des vector übergeben:
vec.data()(in C++11) bzw.&vec[0]in C++03. Das Einzige worauf du aufpassen musst ist, dass du auch den Nulldelimiter im vector hast.strtok verändert aber den Inhalt, data zeigt jedoch auf einen const-Bereich.
Aber wieso strtok? std::string und die algorithms bieten auch alles was strtok kann.
-
Hallo,
ich habe es jetzt doch etwas anders gelöst und es sieht irgendwie besser aus
// string zerlegen string Terminzeile = "Titel;Betreff;Ort"; istringstream tzeile(Terminzeile); string ausgabe; while(getline(tzeile, ausgabe, ';')) { cout<<ausgabe<<endl; }nun gut, man lernt ja noch...

-
SeppJ schrieb:
strtok verändert aber den Inhalt, data zeigt jedoch auf einen const-Bereich.
Nein, data ist so definiert:
c++11 Standard N3242=11-0012 schrieb:
// 23.3.6.4, data access
T* data() noexcept;
const T* data() const noexcept;