Von der C Standard:Was ist die Überlappung von Saiten nach dem C-Standard?
7.21.2.4 Die Strncpy Funktion
Wenn das Kopieren zwischen Objekten erfolgt, die sich überlappen, ist das Verhalten nicht definiert.
Was überlappt?
Es ist klar, dass es überlappt, wenn der Anfang der Zielzeichenfolge das Ende der Quellenzeichenfolge kreuzt.
Aber überlappt sich im nächsten Beispiel?
const char* dateConst = "2017-01-25";
char* date = malloc(16);
strcpy(date, dateConst);
strncpy(date+4, date+5, 2);
strncpy(date+6, date+8, 3);
printf("%s\n", date);
Ausgang: 20170125
Wenn Strncpy nur Symbole char von char copyes wie es in this implementation ist, sollte es kein Problem sein.
Während es der C-Standard ist diktiert das Verhalten von 'strncpy', scheinen Sie C++ zu kompilieren. – StoryTeller
' strncpy' ist eine gefährliche Funktion und sollte vermieden werden. Es war nie beabsichtigt, mit Null-terminierten Strings zu beginnen. Verwenden Sie stattdessen 'memcpy' oder' strcpy'. – Lundin