strcpy wenn dest Puffer ist kleiner als src-Puffer

Ich versuche zu verstehen, der Unterschied/Nachteile von strcpy und strncpy.
Kann jemand bitte helfen:

void main()
{
char src[] = "this is a long string";
char dest[5];

strcpy(dest,src) ;
printf("%s \n", dest);
printf("%s \n", src);

}

Ausgabe:

this is a long string 
a long string 

FRAGE: ich verstehe nicht, wie die Quelle sting bekam modifiziert. Als pro Erklärung, strcpy halten sollte kopieren, bis es auf ein '\0', so ist es nicht, aber wie kommt es, "src" - string geändert habe.

Bitte erklären.

Dies wird als buffer Overun.
Dieser buffer-overflow-problem veranschaulicht, warum sollten Sie wählen, zu verwenden strncopy über strcpy.
Ich konnte es nicht reproduzieren in Ihren code ein. Ich bekomme tring im dest-array.
das ist Undefiniertes Verhalten. c-faq.com/ansi/undef.html "undefined: Alles, was überhaupt geschehen kann; die Norm enthält keine Anforderungen. Das Programm kann nicht kompiliert werden, oder es kann falsch ausgeführt (entweder Absturz oder still generieren falsche Ergebnisse), oder es kann zufällig genau das tun, was der Programmierer beabsichtigt hat."
Vielen Dank an alle. Vor allem, weil Sie nicht nur erklärt, die Antwort, aber ging auf, um zu zeigen anschaulich, wie es funktioniert in den Speicher (für das Verhalten angezeigt, in meinem Fall). Auch darauf hingewiesen, dass dies könnte kotzen unterschiedliche Ergebnisse, wie es ist Undefiniertes Verhalten.

InformationsquelleAutor user193891 | 2009-10-21

Schreibe einen Kommentar