Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Frage zur Funktion von strcpy

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.06.2016, 10:55 Uhr
MissWilberforce



Um das ewige gemecker des Compilers los zu werden wollte ich meine strcpy() Funktionsaufrufe durch die sichere Version strcpy_s() ersetzen.

Hier mein Programmcode:

char *source = "1234567890";

char dest1[20];

strcpy_s(dest1,sizeof(dest1),source);
fprintf(stderr,"[%s]\n",dest1);
fflush(stderr);

char dest2[5];

strcpy_s(dest2,sizeof(dest2),source);
fprintf(stderr,"[%s]\n",dest2);
fflush(stderr);

Der erste strcpy_s Aufruf arbeitet korrekt.

Der zweite führt zu einem Exception Error.

Welchen Sinn macht die Angabe der maximal zu kopierenden Zeichen, wenn die Funktion strcpy_s sie nicht auswertet?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.06.2016, 17:46 Uhr
Tommix



Hallo,
die Fehlermeldung ist nun gerade das Ergebnis der Auswertung. strcpy würde einfach kopieren und dabei kommentarlos Speicher beschreiben, von dem nicht klar ist wem er gehört. Sieh Dir mal die MSDN-Seite dazu an:
https://msdn.microsoft.com/de-de/library/td1esda9.aspx
und dort auch den Link zu "Parametervalidierung".

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.06.2016, 14:22 Uhr
MissWilberforce



Hallo Tommix,

Dank für die Antwort.

Allerdings bestätigt sie nur meine Annahme, dass die Implementierung der Funktion strcpy_s ziemlich nutzlos ist.

Ich hätte erwartet, dass die Funktion solange Zeichen von src nach dest kopiert, bis dest_max erreicht ist, und dann über den Returnvalue signalisiert, das das kopieren nicht vollständig war.

Das schmeissen einer Exception ist wenig produktiv.

Dieser Post wurde am 15.06.2016 um 14:22 Uhr von MissWilberforce editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.06.2016, 14:51 Uhr
ao

(Operator)



Zitat von MissWilberforce:
Das schmeissen einer Exception ist wenig produktiv.

Es ist auch nicht der Zweck einer Exception, produktiv zu sein. Eine Exception soll weh tun und den Programmierer zum Handeln zwingen. Ein Returnwert ist viel zu leicht zu ignorieren.

Nur zur Erinnerung: Funktionen wie strcpy, die blind große Datenmengen kopieren, haben schon viel Leid über die Welt gebracht. Es spricht einiges dafür, diese Funktionen in sensiblen Bereichen grundsätzlich zu verbieten und die entsprechenden Safety-Varianten vorzuschreiben. Natürlich ist das lästig, aber das soll es auch sein.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.06.2016, 14:58 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


warum nicht c++ standard "strncpy" verwenden? (klar kann man auch falsch verwenden, etc ...)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: