Die Funktion wird verwendet, um eine Kopie von C-Strings zu erstellen. Dies wird oft benötigt, um eine beschreibbare Version eines String-Literals zu erhalten. Sie (String-Literale) sind selbst nicht beschreibbar, daher kopiert eine solche Funktion sie in einen zugewiesenen schreibbaren Puffer. Sie können sie dann an Funktionen übergeben, die ihr übergebenes Argument ändern, wie strtok
, das in den String schreibt, den es zu tokenisieren hat.
Ich glaube, Sie mit so etwas wie dies oben kommen kann, da sie genannt wird neue strdup:
char * newstrdup(char const* str) {
char *c = new char[std::strlen(str) + 1];
std::strcpy(c, str);
return c;
}
Du solltest wäre es einmal befreien getan, um die Zeichenfolge mit
delete[] *string;
mit
Eine alternative Schreibweise ist malloc
. Wenn die Bibliothek alt ist, kann es verwendet, dass, die C++ von C geerbt:
char * newstrdup(char const* str) {
char *c = (char*) malloc(std::strlen(str) + 1);
if(c != NULL) {
std::strcpy(c, str);
}
return c;
}
Jetzt sollen Sie die Zeichenfolge frei free
mit, wenn Sie fertig:
free(*string);
Ziehe die erste Version wenn Sie mit C++ schreiben.Wenn der vorhandene Code jedoch free
verwendet, um den Speicher wieder freizugeben, verwenden Sie die zweite Version. Beachten Sie, dass die zweite Version NULL
zurückgibt, wenn kein Speicher verfügbar ist, um die Zeichenfolge zu kopieren, während die erste in diesem Fall eine Ausnahme auslöst. Wenn Sie ein NULL
-Argument an Ihre übergeben, sollte eine weitere Notiz zu Verhalten verwandt werden. Abhängig von Ihrer Bibliothek, die möglicherweise erlaubt oder nicht erlaubt ist. Fügen Sie bei Bedarf entsprechende Überprüfungen in die oben genannten Funktionen ein. In POSIX-Systemen ist eine Funktion strdup
verfügbar, die weder NULL
Argumente erlaubt, noch den Operator C++
zum Reservieren von Speicher verwendet.
Wie auch immer, ich habe mit Google Codesearch für newstrdup
Funktionen gesucht und einige gefunden. Vielleicht ist Ihre Bibliothek unter den Ergebnissen:
Google CodeSearch, newstrdup
Können Sie die newstrudup() -Funktion einfügen? –
@tinkertim: "Ich habe ein altes Programm, in dem einige Bibliotheksfunktion verwendet wird und ich habe diese Bibliothek nicht" ... –
Kannst du irgendeinen alten Code einfügen, wo newstrudp verwendet wird? Vorzugsweise in einer Schleife. Hast du eine Deklaration für Newstrdup aus einer .h-Datei? – jmucchiello