strdup ist deprecated
-
Hallo,
Mein VS2005 sagt mir, dass strdup deprecated ist.
Benutze es um von einem std::string(.c_str()) einen char* für eine C-Api Funktion zu bekommen. Gibt es da einen besseren Weg?
-
Hallo
Vermutlich strndup.
Allerdings dürfet beides nicht aus dem C/C++ Standard sein (zumindestens finde ich es nicht hier)Ansonsten kannst du auch einfach direkt den Rückgabewert von c_str() benutzen. Wenn die API auf nicht-const besteht, du dir aber sicher bist das die Funktion nicht den C-String verändern wird mach einfach ein const_cast.
bis bald
akari
-
Am besten Du definierst _CRT_SECURE_NO_DEPRECATE als Präprozessor-Konstante und ignorierst diese Anmaßung Microsofts ansonsten, bis jemand diese Funktion tatsächlich für veraltet erklärt.
Ansonsten ist die Funktion wirklich kein ANSI-C, sondern BSD. Strndup ist sogar eine GNU-Extension (laut Manpage), deshalb bei VS2005 auch nicht zu finden. Allein deshalb ist es in meinen Augen gleich doppelt dreist von Microsoft, strdup für veraltet zu erklären.
-
@LordJaxom
Vllt. solltest du in deinem Wörterbuch nochmal nachschauen, was deprecated heisst, bevor du Microsoft Dreistigkeit unterstellst.
-
@groovemaster
Wenn es keine Dreistigkeit ist, dann ist es zumindest unglücklich (und das haben Leute von MS längst auch schon gesagt). Der VC Compiler warnt bei einigen Standardfunktionen (wie z.B. std::copy) sie wären deprecated, was aus Sicht des C++ Standards schlicht käse ist. Und da der C++ Standard das einzige Dokument ist, dass eine Standardfunktion als deprecated einstufen kann, wäre es sinnvoller gewesen, wenn MS eine andere Wortwahl verwendet hätte.