+1 Obwohl mir die Lösung von Aeth etwas besser gefällt, scheint sie etwas effizienter zu sein, als die Zeichenfolgenlänge jedes Mal neu zu berechnen.
– Extraneon
20. April 2010 um 10:47 Uhr
Ein Trick, den ich in dieser Richtung gesehen habe, ist to #define eos(s) ((s)+strlen(s)), oder deklarieren Sie eine Funktion, wenn Sie dies bevorzugen. Dann können Sie verwenden sprintf(eos(Buffer), "Stuff")
– clstrfsck
20. April 2010 um 10:47 Uhr
Einfacher noch, Sie können einfach verwenden sprintf(strchr(s, '\0'), "...").
– Arto Bendiken
29. März 2014 um 12:48 Uhr
Wozu dient das Anhängen von + strlen(Buffer) an den eigentlichen Buffer?
– bretcj7
17. September 2016 um 3:43 Uhr
Das ist Zeigerarithmetik. Es ist wie das Hinzufügen der aktuellen Länge des Strings zur Startadresse des ‘Puffers’. Dieser Vorgang ist für MBS und Unicode-Strings nicht sicher. Zum Beispiel würde das Abrufen der Länge der Unicode-Zeichenfolge “Hallo” 5 zurückgeben, aber tatsächlich Puffer + 5 * sizeof(wchar_t) ist in diesem Fall erforderlich
Hier ist eine Version mit einiger Fehlerresistenz. Es ist nützlich, wenn es Ihnen egal ist, wenn Fehler passieren, solange Sie Ihren fröhlichen Weg fortsetzen können, wenn sie auftreten.
Das zweite Argument von snprintf ist unsigned (size_t). Dies bedeutet, dass wenn length > MAX_BUF ist, die MAX_BUF-length unterläuft und snprintf fröhlich außerhalb des Puffers schreibt und einen Pufferüberlauf erzeugt. Beachten Sie, dass die Rückgabe von snprintf gleich der Anzahl der Bytes ist, die geschrieben worden wären, wenn genügend Speicherplatz verfügbar gewesen wäre, und NICHT der Anzahl der tatsächlich geschriebenen Bytes.
Dies ist die beste Lösung, keine Notwendigkeit zu strlen
– tttony
1. September 2018 um 14:59 Uhr
Beachten Sie, dass Sie auch die Startadresse des Puffers zur weiteren Bezugnahme speichern müssen.
– Bersanri
30. November 2018 um 12:05 Uhr
SergGr
Warum willst du verwenden sprintf für die Zeichenfolgenverkettung, wenn es Methoden gibt, die speziell für das, was Sie brauchen, gedacht sind, wie z strcat und strncat?
Dies ist die beste Lösung, keine Notwendigkeit zu strlen
– tttony
1. September 2018 um 14:59 Uhr
Beachten Sie, dass Sie auch die Startadresse des Puffers zur weiteren Bezugnahme speichern müssen.
– Bersanri
30. November 2018 um 12:05 Uhr
Kleines vollständiges Codebeispiel
Mit flacher Ebene Studio Nur Standardbibliothek
#include <stdio.h>
int main()
{
char c[1024];
int i=0;
i+=sprintf(c+i,"We " );
i+=sprintf(c+i,"Love " );
sprintf(c+i,"Coding");
printf("%s",c);
}
AUSGANG: Wir lieben Programmieren
14200400cookie-checkWie fügt man Strings mit sprintf an?yes
Ich werde nicht sprintf verwenden, sondern snprintf, ich werde nicht printf( str ) verwenden, sondern printf( “%s” , str )
– Fa.
20. April 2010 um 12:59 Uhr