Wie wir alle wissen, ist strcpy_s eine Sicherheitsversion von strcpy.Wie funktioniert strcpy_s?
Aber ich frage mich, wie es funktioniert ...
lassen Sie uns einige Beispiele sehen.
strpy_s Erklärung:
errno_t strcpy_s (_CHAR * _DEST, size_t _SIZE, Konst _CHAR * _SRC)
EG1
char dest[5];
char* src = "abcdefg";
strcpy_s(dest,5,src);
Es wird eine Behauptung zurück.
Ich glaube, ich das verstehen kann, verwenden Sie _SIZE sicherzustellen, dass wir nicht mehr Zeichen als _SIZE
kopieren Aber .. ich das nicht verstehen kann:
char dest[5];
char* src = "abcdefg";
strcpy_s(dest,10,src);
wir können bekomme immer noch eine Behauptung, wie ist das passiert?
ps, Fehler war:
Debug Assertionsfehler
Ausdruck: wird strcpy_s (L & & 0 "Puffer zu klein ist")
In VS2013
prüft die Größe von dest in seinem Körper? und wenn es stimmt, wie? Wie überprüfe ich einen Zeiger wie _DEST?
Lesen Sie die Dokumentation sorgfältig: [MSDN] (http://msdn.microsoft.com/en-us/library/td1esda9.aspx) – Jens
Ihr zweites Beispiel ist falsch. Der Parameter _SIZE muss die Größe des Puffers korrekt angeben. Wenn Sie 10 für _SIZE geben, aber Ihr Puffer nur 5 ist, ist das Ergebnis nicht definiert. Es gibt keine Möglichkeit, dass strcpy_s diesen Fehler finden kann. – Brandin
tatsächlich gab es eine Behauptung. – Joey