www.mikrocontroller.net

Forum: PC-Programmierung strcpy vs. strcpy_s


Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist (zur Zeit noch) so ein Tick von Microsoft... Google.

Autor: tata (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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/FUNCTION...
http://www.cplusplus.com/reference/clibrary/cstrin...

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: tata (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> 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. ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.