005
29.09.2006, 18:04 Uhr
0xdeadbeef
Gott (Operator)
|
Zitat von FloSoft: |
C++: |
const char *hallo = {"Hallo"}; char welt[] = { "Welt" };
|
|
Du meinst doch wohl hoffentlich
C++: |
char const *hallo = "Hallo"; char welt[] = "Welt";
|
Wie dem auch sei, Strings kopieren kann man wie folgt: In C++
C++: |
#include <string>
// ...
std::string src = "Hallo, Welt!"; std::string dest;
dest = src; // Hier Zuweisung
|
In C ist es etwas komplizierter:
C++: |
#include <string.h>
// ...
char src[] = "Hallo"; char dest[10]; // Länge so wählen, dass der String reinpasst
strncpy(dest, src, 10); // Der dritte Parameter ist die maximale Größe dessen, was dest aufnehmen kann - sonst gibts evtl. buffer overflows
|
In C wird es vor allem dann kompliziert, wenn du zur Compilezeit noch nicht weißt, wie lang der zu kopierende String höchstens sein kann. In dem Fall musst du den Speicher dynamisch anfordern und freigeben, das sieht dann so aus:
C++: |
#include <stdio.h> #include <stdlib.h> #include <string.h>
// ...
char src[] = "Hallo"; char *dest;
dest = malloc(strlen(src) + 1);
if(dest == NULL) { fputs("Nicht genug Speicher", stderr); exit(1); }
strcpy(dest, src); // Hier wissen wir, dass src in dest passt, also ist die zusätzliche Überprüfung durch strncpy unnötig
free(dest); // Freigabe nicht vergessen, sonst gibts Speicherlecks.
|
-- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |