char* buffer = ... allocate a buffer ...
int value = 4564;
sprintf(buffer, "%d", value);
Beispiel von snprintf
char buffer[10];
int value = 234452;
snprintf(buffer, 10, "%d", value);
Beide Funktionen sind ähnlich fprintf, aber die Ausgabe wird in ein Array und nicht in einen Stream geschrieben. Der Unterschied zwischen sprintf und snprintf ist das snprintf garantiert keinen Pufferüberlauf, indem bis zu einer maximalen Anzahl von Zeichen geschrieben wird, die im gespeichert werden können buffer.
Ein weiterer Unterschied zw sprintf adn snprintf ist der Standard, für den sie beschrieben werden in: C89 (und später). sprintf; C99 für snprintf. Insbesondere der Windows-Bibliothek fehlt die snprintf funktionieren oder sich anders verhalten, als der Standard beschreibt.
– pmg
9. März 2011 um 10:06 Uhr
Ist snprintfPutten '\0' zum letzten Element meines Arrays? Damit ich weiß, wo es endet?
– Silidron
20. November 2016 um 9:30 Uhr
@MuhamedCicak Es wird das abschließende „\0“ hinzugefügt, vorausgesetzt, dass der geschriebene Wert und das Ende „\0“ in den Größenparameter passen. Sie sollten den Rückgabewert überprüfen, um zu sehen, ob es die eingegebene Größe oder größer ist. Wenn es sich um die eingegebene Größe oder mehr handelt, wurde das Ergebnis abgeschnitten, und der Puffer enthält möglicherweise kein abschließendes ‘\0’-Zeichen
– Edwin Buck
20. November 2016 um 17:59 Uhr
@EdwinBuck Das ist richtig, aber zur weiteren Verdeutlichung würde ich sagen, dass Sie immer ein ‘\ 0’ haben, auch wenn “Abschneiden” auftritt (es sei denn, Sie haben eine Größe von Null angegeben, aber diese Verwendung ist nur sinnvoll, um den erforderlichen Puffer zu bestimmen Größe, bevor Sie einen zweiten Anruf tätigen). Um ganz richtig zu sein, muss man auch prüfen, ob der zurückgegebene Wert negativ ist, was passiert, “wenn ein Codierungsfehler aufgetreten ist” (was auch immer das bedeutet). Im Falle eines Fehlers gibt nichts an, dass der Puffer zumindest mit ‘\0’ beginnt, und es kann zu Schrecken kommen, wenn versucht wird, ihn zu verwenden!
– Johan Boule
8. April 2020 um 15:11 Uhr
Verwenden snprintf – es ist Standard und in jedem Compiler verfügbar. Fragen Sie es nach der benötigten Größe ab, indem Sie es mit aufrufen NULL, 0 Parameter. Weisen Sie am Ende ein Zeichen mehr für null zu.
int length = snprintf( NULL, 0, "%d", x );
char* str = malloc( length + 1 );
snprintf( str, length + 1, "%d", x );
...
free(str);
Mirweiser Khan
Bevor ich fortfahre, muss ich Sie warnen itoa ist KEINE ANSI-Funktion – es ist keine Standard-C-Funktion. Du solltest benutzen sprintf umwandeln ein int in eine Schnur.
itoa nimmt drei Argumente.
Die erste ist die zu konvertierende Ganzzahl.
Der zweite ist ein Zeiger auf ein Array von Zeichen – hier wird die Zeichenfolge gespeichert. Das Programm kann abstürzen, wenn Sie a übergeben char * Variable, also sollten Sie ein Zeichenarray normaler Größe übergeben und es wird gut funktionieren.
Das letzte ist NICHT die Größe des Arrays, aber es ist die BASIS Ihrer Zahl – Basis 10 ist diejenige, die Sie am wahrscheinlichsten verwenden werden.
Die Funktion gibt einen Zeiger auf ihr zweites Argument zurück – wo sie die konvertierte Zeichenfolge gespeichert hat.
itoa ist eine sehr nützliche Funktion, die von einigen Compilern unterstützt wird – schade, dass sie im Gegensatz zu nicht von allen unterstützt wird atoi.
Wenn Sie noch verwenden möchten itoa, hier ist, wie Sie es verwenden sollten. Andernfalls haben Sie eine andere Option mit sprintf (solange Sie eine Ausgabe auf Basis 8, 10 oder 16 wünschen):
char str[5];
printf("15 in binary is %s\n", itoa(15, str, 2));
Shamim Hafiz – MSFT
Verwenden Sie besser sprintf(),
char stringNum[20];
int num=100;
sprintf(stringNum,"%d",num);
Ja, ich habe stdlib.h eingefügt, aber es funktioniert immer noch nicht
– Schweta
9. März 2011 um 7:20 Uhr
Mögliches Duplikat von How to convert an int to string in C
– Ciro Santilli OurBigBook.com
1. September 2018 um 9:50 Uhr