Unterschied zwischen strncpy und memcpy?
Wie kann ich den Zugriff s[7]
im s
?
Ich nicht beobachten, keinen Unterschied zwischen strncpy
und memcpy
. Wenn ich drucken möchte die Ausgabe s
zusammen mit s[7]
(wie qwertyA
), was sind die änderungen habe ich gemacht in dem folgenden code:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char s[10] = "qwerty", str[10], str1[10];
s[7] = 'A';
printf("%s\n",s);
strncpy(str,s,8);
printf("%s\n",str);
memcpy(str1,s,8);
printf("%s\n",str1);
return 0;
}
/*
O/P
qwerty
qwerty
qwerty
*/
InformationsquelleAutor der Frage user559208 | 2011-01-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Andere haben darauf hingewiesen, Ihre null-Terminierung Probleme. Sie müssen verstehen, null-Terminierung, bevor Sie verstehen den Unterschied zwischen
memcpy
undstrncpy
.Der Unterschied ist, dass
memcpy
kopiert N Zeichen, die Sie bitten, währendstrncpy
kopiert bis zum ersten null-terminator-inclusive -, oder N-Zeichen, je nachdem, was weniger. (Wenn es Exemplare, die weniger als N Zeichen enthält, wird der pad den rest mit null-Zeichen.)InformationsquelleAutor der Antwort Philip Potter
Dass Sie immer die Ausgabe
querty
da der index7
ist falsch (arrays werden indiziert von 0, nicht 1). Es ist ein null-terminator bei index6
zu signalisieren, der das Ende der Zeichenfolge, und alles was danach kommt wird es keine Wirkung haben.Zwei Dinge, die Sie benötigen, um zu beheben:
7
ims[7]
zu6
s[7]
Das Ergebnis wird sein:
Original nicht funktioniert und Feste arbeiten.
Als für die Frage,
strncpy
versusmemcpy
der Unterschied ist, dassstrncpy
fügt ein null-Abschlusszeichen für Sie. ABER nur, wenn die Quell-Zeichenfolge hat eine vorn
. Sostrncpy
ist, was Sie wollen, hier zu verwenden, aber sehr vorsichtig sein, von den großen ABER.InformationsquelleAutor der Antwort marcog
Machen "qwertyA" Sie müssen
s[6] = 'A'
unds[7]='\0'
Strings sind indiziert von 0, so
s[0] == 'q'
und Sie müssen null-terminiert.InformationsquelleAutor der Antwort Matt Ellen
Wenn Sie haben:
dies ist, was das array enthält:
Wenn Sie möchten, fügen Sie Eine 'a' am Ende des Strings, das ist bei index 6, da die array-Indizes beginnen bei 0
Beachten Sie, dass beim initialisieren Sie ein array auf diese Weise, wird der Verbleibende Raum auf 0 gesetzt ist (ein nul-terminator), Während in diesem Fall nicht erforderlich, in der Regel sich bewusst sein, dass Sie brauchen, um Ihre Saiten nul beendet.
z.B.
Im obigen Beispiel "QWERTZ" , einschließlich seiner nul terminator kopiert
s
. s[6] überschreibt, dass nul-terminator. Da der rest ders
ist nicht initialisiert, müssen wir hinzufügen, ein nul-terminator selbst mits[7] = 0;
InformationsquelleAutor der Antwort nos
Strncpy kopiert bis zu
NULL
auch Sie spezifiziert die Anzahl der bytes, die kopiert werden , aber memcpy kopieren bis zur angegebenen Zahl der bytes .printf-Anweisung wird der Druck bis auf NULL , so werden Sie versuchen, drucken eines einzelnen charater , es wird sich zeigen ,
AUSGANG
InformationsquelleAutor der Antwort GOBI