Warum ist strcpy() deprecated - und vor allem: Warum strdup() ?


Thomas Wölfer
Thomas Wölfer

07. Juni 2005


Der C++ Compiler aus VS2005 meckert als 'deprecated' (mißbilligte) markierte Funktionen entsprechend an - ein 'dezenter' Hinweis an den Programmierer, doch eine aktuelle Variante der entsprechenden Funktion aufzurufen. Dabei sind einige Dinge unter Umständen ganz schön verwirrend...

So ist die Funktion strcpy() [so wie viele andere der String-Funktionen] als deprecated markiert. Im wesentlichen sind das alle String-Funktionen die einen 'char *' Parameter haben. Grund dafür: Diese Funktionen sind anfällig für Buffer-Overflows und sollten daher nicht länger verwendet werden. Statt der unsicheren Funktionen nimmt man besser die 'sicheren' Funktionen her: Die erkennt man am angehängten '_s' - also strcpy_s() statt strcpy().

Warum aber wird dann strdup() ebenfalls bemängelt: Das Ding hat nämlich definitiv kein Sicherheitsproblem..

Des Rätsels Lösung: Nur weil ein Satz an Funktionen aus Sicherheitsgründen deprecated sind, muss das nicht für alle gelten. Und strdup() ist so ein Fall: Die Funktion wird darum angemeckert, weil es sich dabei nicht um eine Standard-C Library Funktion handelt - und solche sollten laut Standard durch ihre Schreibweise erkennbar sein. Der Ersatz für strdup() - der dann auch nicht mehr angemeckert wird - ist _strdup().

Lange Rede kurzer Sinn: Einige Funktionen werden bemängelt weil sie nicht zum Standard passen, andere weil sie nicht sicher sind.