ich so verwirrt bin, tut mir leid, wenn dies offensichtlich, aber:String Kopie sagt Puffer zu klein ist, strcpy_s Quelle Ausgabe
int main()
{
char stringDest[20];
char stringSource[20];
strcpy_s(stringDest, stringSource);
return 0;
}
die Ausnahme auslöst „Buffer ist zu klein“. Während:
char stringSource[20];
int main()
{
char stringDest[20];
strcpy_s(stringDest, stringSource);
return 0;
}
Funktioniert gut.
Außerdem dachte ich, der Punkt des sicheren strcpy_s(dest, size, source)
war, dass man die Anzahl der Bytes an, die kopiert werden, aber wenn ich dies tun:
int main()
{
char stringDest[20];
char stringSource[20];
strcpy_s(stringDest, 1, stringSource);
return 0;
}
ich ein „Puffer zu klein Ausnahme ist“. Ich bin so verwirrt. Warum macht die Deklaration der Variablen außerhalb von main()
einen Unterschied? Und warum ist es falsch, 1 Byte zum Kopieren anzugeben?
Es ist undefiniertes Verhalten, nicht initialisierte Variablen zu lesen. –
Ich weiß, dass Sie eine Antwort darauf wollen, aber anstatt sich damit zu beschäftigen, können Sie einfach 'std :: string's verwenden und' std :: string foo = "foo"; Std :: Stringleiste; bar = foo; 'und jetzt' bar' hat '" foo "' drin. – NathanOliver
'errno_t strcpy_s ( char * strDestination, size_t numberOfElements, const char * strSource );' – BLUEPIXY