C++ Primer - Code
-
Ich verstehe paar Dinge bei dem Code aus meinem Buch nicht:
const char *pc = "a very long literal string"; const size_t len = strlen(pc +1); //Verstehe ich nicht? Warum kann ich "+1" mit in die Funktion schreiben, bei mir müsste dass "strlen(pc) + 1" heißen?! for(size_t ix = 0; ix != 1000000; ++ix) { char *pc2 = new char[len + 1]; //Warum "+1"? Warum? dass verstehe ich gar nicht. strcpy(pc2, pc); if(strcmp(pc2, pc)) ; //Warum ";", gehört delete [] pc2 nicht mit zum If-Rumpf? delete [] pc2; }Ich hoffe ihr könnt mir das alles beantworten.
MfG
Stromberg
-
Hallo!
Wuerdest du mir die Seite nennen? Habe den C++ Primer naemlich auch.
Ich finde den ganzen Code etwas merkwuerdig.
Zeile 2: +1 sollte definitiv nach Ausfuehrung von strlen() kommen. Das hat den Grund, dass strlen() die Anzahl der Zeichen ohne Nullzeichen zurueckgibt.
Zeile 5: Das +1 ist definitiv unnoetig, da der Platz fuer das Nullzeichen ja schon in Zeile 2 hinzugefuegt worden ist.
Zeile 7 + 8: Sehr merkwuerdiger Code. strcmp vergleicht die zwei Strings und gibt NULL zurueck, falls kein Unterschied festgestellt werden konnte. Das if-Konstrukt hat durch das Semikolon dann absolut keine Wirkung. Ausserdem ergibt der Vergleich immer NULL zurueck, da wir ja wissen, dass die zwei Strings identisch sind.
Und die ganze for-Schleife verstehe ich dann gar nicht mehr...Sorry, falls ich nicht weiterhelfen konnte. Vielleicht weiss es ja ein anderer besser.
Gruss,
Cartman
-
Ist S. 174, der graue Kasten unten. Danke schon mal im Voraus.
MfG
StrombergPS: Der C++ Primer ist bei mir "Vierte Auflage", wäre ja blöd wenn die jetzt unterschiedlich wären, und wirs nicht checken würden

-
Der Code dient anscheinend zu Vergleichszwecken. Hat sich halt ein Fehler mit den +1'en eingeschlichen.
MfG
-
Stromberg schrieb:
const char *pc = "a very long literal string"; const size_t len = strlen(pc +1); //Verstehe ich nicht? Warum kann ich "+1" mit in die Funktion schreiben, bei mir müsste dass "strlen(pc) + 1" heißen?!strlen(pc+1);
das heisst die Sringlänge wird ab &pc[1] bzw &(pc+1) ermittelt, also ohne das 'a'
Stromberg schrieb:
char *pc2 = new char[len + 1]; //Warum "+1"? Warum? dass verstehe ich gar nicht. strcpy(pc2, pc);Es muss jetzt wegen des zuvorgesagten
char *pc2 = new char[len + 2];
heissen, damit man dann den ganzen String kopieren kann.

-
Stromberg schrieb:
Ist S. 174, der graue Kasten unten. Danke schon mal im Voraus.
MfG
StrombergPS: Der C++ Primer ist bei mir "Vierte Auflage", wäre ja blöd wenn die jetzt unterschiedlich wären, und wirs nicht checken würden

Habe auch die 4. Auflage

Der ueber mir hat Recht - hat sich leider ein Fehler eingeschlichen. Wie bereist erwaehnt muss das +1 in Zeile 2 raus und nach der Klammer folgen (fuer das Nullzeichen). Das +1 in Zeile 5 ist zwar unnoetig, aber kein Fehler, trotzdem unnoetig.
Und strcmp soll eigentlich nur das Arbeiten mit dem neu erstellten String (durch strcpy) demonstrieren, schaetze ich (so kann ich das ausm Buch rauslesen) - weiter nichts. Fuer den Programmablauf ist es ohne Bedeutung.Ich hoffe, ich konnte helfen.
Gruss
Cartman
-
@FritzeX
Macht aber irgendwie keinen Sinn - dann kann man ja gleichstrlen(pc)+1und spaeternew char[len]nehmen.
Wo ist da der Unterschied?Gruss
Cartman
-
Die deutsche Übersetzung des C++ Primer scheint ja echt mies zu sein. Hatte schon damals im Buchladen gesehen, das der dt. Übersetzer allein auf den ersten Seiten, den
cl.exeCompiler alsc1.exeübersetzt hat!
Der C++-Primer ist nämlich ansonsten echt gut, wird aber durch delitantische Buchübersetzer total kaputt gemacht. Da würde ich mir vom Verlag das nächste Mal einen anderen Übersetzer wünschen.