Kopieren Ende der Zeichenfolge in C
Ich versuche, mit strncpy nur kopieren Teil eines Strings an einen anderen string in C.
Wie:
c[] = "How the heck do I do this";
Dann kopieren "do this"
auf die andere saite, so dass gilt:
d[] = "do this"
Hilfe ist willkommen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Geben Sie einfach die Adresse des ersten Briefes, den Sie kopieren möchten:
strcpy(dest, &c[13])
.Wenn Sie beenden wollen, bevor die Zeichenfolge endet, verwenden Sie
strncpy
oder, besser,memcpy
(vergessen Sie nicht, 0-beenden Sie den kopierten string).strncpy
muss eine Längestrncpy(dest, &c[20], 8)
. Ob dest ist einchar*
verweist auf ein ausreichend großesmalloc
ed Speicherbereich oder einem ausreichend großenchar[N]
egal.d
?strcpy(d, &c[20])
kopiert den Teilc
von position 20 auf den 0-terminator (inklusive) in das arrayd
.strncpy
ist (im Grunde immer) die falsche Wahl. In diesem speziellen Fall, dann funktioniert es, aber nur ziemlich viel durch Zufall -- da hast du das kopieren am Ende einer Zeichenfolge, dann funktioniert es genau wiestrcpy
. Das ist natürlich, führt zu der Tatsache, dassstrcpy
wird auch funktionieren, aber leichter.Wenn Sie wollen Griff einem mehr Allgemeinen Fall gibt es ein ziemlich überraschendes (aber sehr effektive) Auswahl:
sprintf
können genau das tun, was Sie wollen:sprintf
(im Gegensatz zustrncpy
oderstrcpy
) funktioniert auch für die meisten Allgemeinen Fall-nehmen wir an, Sie wollte, kopieren Sie einfachdo I
zud
haben, aberd
herauskommen als richtig NUL-terminierten string:Hier, die
4
ist die Länge der Sektion zu kopieren, undc+13
ist ein Zeiger auf den Anfang des Teil zu kopieren.do I do this
nichtdo I d
. ideone.com/u8HRuIKlingt wie Sie sind auf der Suche für die strncpy Funktion. Nicht Sinn der C++ - Seite, die Dokumentation ist für C.
Oder Sie können auch die
strcpy
Funktion.Verwenden memcpy, die möglicherweise eine bessere Passform, können nur kopieren Sie einen Teil eines Strings.
Verwendung von strncpy oder strcpy kopiert tatsächlich einen ganzen string bis zum '\0' - terminator.
In jedem Fall ist es klug und Weise zu übernehmen, es gibt viel Platz für die resultierende Zeichenfolge ansonsten Pufferüberläufe so sicherzustellen, dass genügend Speicherplatz im Puffer.