Die Funktionen strcpy
und strncpy
sind Teil der C-Standardbibliothek und arbeiten mit vorhandenem Speicher. Das heißt, Sie müssen den Speicher bereitstellen, in den die Funktionen die Zeichenfolgendaten kopieren, und als Konsequenz müssen Sie über Ihre eigenen Mittel verfügen, um herauszufinden, wie viel Speicher Sie benötigen.
Dies strdup
ist eine Posix-Funktion, die eine dynamische Speicherzuweisung für Sie durchführt. Es gibt einen Zeiger auf den neu zugewiesenen Speicher zurück, in den die Zeichenfolge kopiert wurde. Aber Sie sind jetzt für diese Erinnerung verantwortlich und müssen sie schließlich free
.
Das macht strdup
eine der "versteckten malloc
" Komfortfunktionen aus, und das ist vermutlich auch der Grund, warum sie nicht Teil der Standardbibliothek ist. Solange Sie die Standardbibliothek verwenden, wissen Sie, dass Sie free
für jedes malloc
/ eine aufrufen müssen calloc
. Aber Funktionen wie das strdup
Einführen eines versteckten malloc
, und Sie müssen es genauso behandeln wie ein malloc
zum Zweck der Speicherverwaltung. (Eine weitere solche versteckten Zuordnungsfunktionen sind GCCs abi::__cxa_demangle()
.) Vorsicht!
strdup()
ed-Zeichenfolge kann über das Ende der aktuellen Funktion hinausgehen, aber das könnte trotzdem der Fall sein (wenn das Zielstrcpy()
ein vom Aufrufer bereitgestellter Puffer, eine globale Variable oder selbst manuell mitmalloc()
oder zugewiesen istnew
). .