strcpy vs. strcpy_s Wenn man in Visual Studio C Programmiert bekommt man immer eine warning wenn man strcpy verwendet. (The function or variable may be unsafe) Hab das bis jetzt noch nie gesehen dieses strcpy_s, hat da jemand Informatioen wie das implementiert ist ? thx
Mit strcpy_s bindest du dich an MS und einige wenige andere Libs, als Alternative wäre strncpy zu nennen, dass ist in der string.h bzw cstring.h vorhanden und gehört vermutlich zum C-Standard. http://home.fhtw-berlin.de/~junghans/cref/FUNCTIONS/strncpy.html http://www.cplusplus.com/reference/clibrary/cstring/strncpy.html
Viele dieser String-Funktionen sind saublöd konstruiert und sorgen seit Jahrzehnten massgeblich für die berüchtigten Buffer-Overflows. Dass strcpy() über das Ende vom Ziel hinaus schreibt ist einigermassen offensichtlich. Der Tip mit strncpy ist jedoch auch eine Falle. Denn wenn das "n" erreicht wird ist kein \0 hinten dran, was von vielen Programmierern vergessen wird, mit entsprechend hässlichen Folgen. Bei strncat wiederum vergisst man gern, dass sich das "n" nicht aufs Ziel sondern auf die Quelle bezieht und folglich den Zielpuffer auch wieder nicht absichert. Daher gibt es mittlerweile einige Extrafunktionen um die übelsten Löcher zu stopfen und Microsoft strcpy_s ist eine davon. Aber m.E. sollte man für einigermassen sicheres Programmieren diese ganze Lib entweder garnicht oder nur mit grosser Vorsicht benutzen. Ein Ansatz besteht darin, sich auf Basis von ein paar solcher Funktionen eigene Funktionen zu definieren, die man dann konsequent an Stelle der Originale verwendet. Und so ist man dann auch nicht von mehr oder weniger proprietären Erweiterungen abhängig. Besser ist es freilich, wenn man gleich C++ mit der entsprechenden Stringverarbeitung verwendet.
tata wrote: > Mit strcpy_s bindest du dich an MS und einige wenige andere Libs, > als Alternative wäre strncpy zu nennen, dass ist in der string.h > bzw cstring.h vorhanden und gehört vermutlich zum C-Standard. Diese _s-Varianten werden sehr wahrscheinlich zum kommenden Standard gehören. ISO/IEC TR 24731 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1225.pdf
>> Mit strcpy_s bindest du dich an MS und einige wenige andere Libs, >> als Alternative wäre strncpy zu nennen, dass ist in der string.h >> bzw cstring.h vorhanden und gehört vermutlich zum C-Standard. > Diese _s-Varianten werden sehr wahrscheinlich zum kommenden Standard > gehören. > ISO/IEC TR 24731 > Oh, interessant, wusste ich noch gar nicht. @A. K. (prx) Stimmt schon, ist halt wie immer in C, man muss wissen was man tut. ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.