Frage zu strcat
-
Jetz bin ich aber enttäuscht von der "besseren" Lösung.
Wie wärs mit std::string?Simon
-
theta schrieb:
Jetz bin ich aber enttäuscht von der "besseren" Lösung.
Wie wärs mit std::string?Simon
Das wäre aber Themaverfehlung, es ging dem Threadstarter um strcat. Ansonsten hast Du natürlich recht. Das ist i.d.R. noch besser.
mfg Martin
-
Wenn´s denn unbeding C sein muss würde ich eher strncpy und strncat benutzen.
-
DocShoe schrieb:
Wenn´s denn unbeding C sein muss würde ich eher strncpy und strncat benutzen.
Ich denke weniger, dass ein Code mit
cout<<x;C sein muss. Wahrscheinlich sind blurry333 lediglich die Vorteile vonstd::stringgegenüber C-Strings noch nicht ganz bewusst.
-
Nexus schrieb:
... Wahrscheinlich sind blurry333 lediglich die Vorteile von
std::stringgegenüber C-Strings noch nicht ganz bewusst.Ich sehe in diesem einfachen Beispiel keine Vorteile von C++ (std::string) gegenüber C (strcpy, strcat).
Ist wieder ein Thema für Dogmatiker! :p
-
berniebutt schrieb:
Nexus schrieb:
... Wahrscheinlich sind blurry333 lediglich die Vorteile von
std::stringgegenüber C-Strings noch nicht ganz bewusst.Ich sehe in diesem einfachen Beispiel keine Vorteile von C++ (std::string) gegenüber C (strcpy, strcat).
Ist wieder ein Thema für Dogmatiker! :pFalsch. Es geht hier nicht um eine konkrete Anwendung sondern um eine Übung. Es ist nicht verkehrt, auch solche Klassen wie std:string zu betrachten um dann, wenn es um eine konkrete Anwendung geht, souverän entscheiden zu können, was Sinn macht. Wenn ich bei Übungen nur strcpy und co anschaue, werde ich nie lernen, std:string einzusetzen auch, wenn es besser wäre.
mfg Martin
-
berniebutt schrieb:
Nexus schrieb:
... Wahrscheinlich sind blurry333 lediglich die Vorteile von
std::stringgegenüber C-Strings noch nicht ganz bewusst.Ich sehe in diesem einfachen Beispiel keine Vorteile von C++ (std::string) gegenüber C (strcpy, strcat).
Ist wieder ein Thema für Dogmatiker! :pIch schon. Du reservierst 80 Zeichen, wo du nur 10 brauchst. Immerhin eine Verschwendung von 700%. Und deine Definition auf
char c[10]zu ändern, hilft nur sehr bedingt, denn sobald (wie fast immer) die Inhalte dynamisch werden (Usereingabe, Auslesen aus Datei etc.) kommt immer entweder der Fall vor, dass du zu wenig Platz hast und im schlimmsten Fall Pufferüberläufe provozierst, oder zu viel und damit Speicherverschwendung. Mitstd::stringhast du diese ganzen Probleme nicht.
Vergleiche darüber hinaus auch die Lesbarkeit:char x[10]; strcpy(x, "Hallo"); strcat(x, "Welt"); // vs std::string x = "Hallo"; x += "Welt";
-
berniebutt schrieb:
Nexus schrieb:
... Wahrscheinlich sind blurry333 lediglich die Vorteile von
std::stringgegenüber C-Strings noch nicht ganz bewusst.Ich sehe in diesem einfachen Beispiel keine Vorteile von C++ (std::string) gegenüber C (strcpy, strcat).
Ist wieder ein Thema für Dogmatiker! :pNein, sondern für Leute, die keine abstürzenden Programme haben wollen

int main() { char x[8]; char* y="Welt"; char* p="Hallo"; strcpy(x,p); strcat(x,y); cout<<x; }wird sicher zum Problem (wer findet den Fehler).
int main() { std::string y( "Welt" ); std::string p( "Hallo" ); std::string x = p + y; cout<<x; }geht einfach.
Lars
-
berniebutt schrieb:
Ich sehe in diesem einfachen Beispiel keine Vorteile von C++ (std::string) gegenüber C (strcpy, strcat).
Ist wieder ein Thema für Dogmatiker! :pVom "Die ewig Gestrigen e.V." habe ich schon mal was gehört.
Kann man deinem Verein beitreten?
-
Artchi schrieb:
Vom "Die ewig Gestrigen e.V." habe ich schon mal was gehört. Kann man deinem Verein beitreten?

Lass gut sein, auch ohne Verein. Die Smileys sind doch dazu da, mal etwas provokativ ausdrücken zu dürfen! :p Klar, schätze ich die Neuerungen von C++ gegenüber dem vorherigen C sehr und setze diese auch ein. Nur, wenn ich einzelne Strings bekannter Länge habe, die einmal initiert werden (z.B. AppName), dann mache ich das weiter mit einem C-String. Als nun mal fauler Mensch, wähle ich stets den einfachsten, kürzesten, und sichersten Weg.
Ich habe allein etwas gegen die hier oft geäusserte Meinung: "Das macht man heute nicht mehr so, ist kein C++, sondern veraltetes C!"
-
berniebutt schrieb:
Als nun mal fauler Mensch, wähle ich stets den einfachsten, kürzesten, und sichersten Weg.
berniebutt schrieb:
Ich sehe in diesem einfachen Beispiel keine Vorteile von C++ (std::string) gegenüber C (strcpy, strcat).
Die beiden Aussagen passen nicht zusammen.
string c = a + b;ist zweifellos einfacher, kürzer und sicherer alschar c[wievieleigentlich?]; strcpy(c, a); strcat(c, b);.
-
berniebutt schrieb:
Ich habe allein etwas gegen die hier oft geäusserte Meinung: "Das macht man heute nicht mehr so, ist kein C++, sondern veraltetes C!"
Und aus reinem Trotz nimmst du also doch die veraltete Lösung mit mehr Nachteilen?
Ist ja nicht so, dass C-Strings immer die schlechtere Wahl sind. Z.B. für Literale nehme ich auch meist
const char*. Aber sobald etwas mehr Operationen im Spiel sind, macht man sich das Leben mitstd::stringum einiges leichter.
-
blurry333 schrieb:
[...]Dieser Code führt zu einem Problem. Warum ?
berniebutt schrieb:
[...]Ich sehe in diesem einfachen Beispiel keine Vorteile von C++ (std::string) gegenüber C (strcpy, strcat).
Ist wieder ein Thema für Dogmatiker! :pTja...