Ich habe eine Dummy-Frage. Ich möchte eine Ganzzahl in einen Puffer drucken, der mit 0 aufgefüllt wird, aber ich kann es nicht aussortieren sprintfFormat. Ich versuche folgendes
[...] printf("%2d", 3) results in " 3", while printf("%02d", 3) results in "03".
Warum musst du werfen my_val zu int wenn es schon eine ist int?
– Kevinji
25. Mai 2011 um 2:17 Uhr
Die Polsterung und Breite kommen Vor der Typbezeichner:
sprintf( buf, "%030d", my_val );
Versuchen:
sprintf( buf, "%030d", my_val );
Ihre Genauigkeits- und Breitenparameter müssen zwischen „%“ und dem Konvertierungsbezeichner „d“ liegen, nicht danach. Tatsächlich tun das alle Flags. Wenn Sie also ein vorangestelltes ‘+’ für positive Zahlen wünschen, verwenden Sie ‘%+d’.
John
Es ist %030dmit Typenbuchstaben am Ende.
Lundin
Eine ziemlich effektive Version, die keine langsamen Bibliotheksaufrufe benötigt:
#include <stdio.h>
void uint_tostr (unsigned int n, size_t buf_size, char dst[buf_size])
{
const size_t str_size = buf_size-1;
for(size_t i=0; i<str_size; i++)
{
size_t index = str_size - i - 1;
dst[index] = n%10 + '0';
n/=10;
}
dst[str_size] = '\0';
}
int main (void)
{
unsigned int n = 1234;
char str[6+1];
uint_tostr(n, 6+1, str);
puts(str);
}
Dies kann weiter optimiert werden, obwohl es wahrscheinlich immer noch einige hundert Mal schneller ist als sprintf wie es ist.