Ich kann nie verstehen, wie man einen unsigned long
Datentyp in C druckt .
Angenommen, es unsigned_foo
ist ein unsigned long
, dann versuche ich:
printf("%lu\n", unsigned_foo)
printf("%du\n", unsigned_foo)
printf("%ud\n", unsigned_foo)
printf("%ll\n", unsigned_foo)
printf("%ld\n", unsigned_foo)
printf("%dl\n", unsigned_foo)
Und alle drucken -123123123
stattdessen eine Nummer unsigned long
, die ich habe.
c
printf
long-integer
unsigned
format-specifiers
bodacydo
quelle
quelle
%lu
diesmal gearbeitet. Vielen Dank. Etwas anderes muss vorher passiert sein und es hat nicht funktioniert.%lu
. Technisch gesehen ist es ein undefiniertes Verhalten, aber in Wirklichkeit hat die Variable einen unvorhersehbaren Wert, der an printf übergeben wird, den printf dann als vorzeichenlos interpretiert. Ich vermute, Bodacydos ursprüngliches Problem war, dass der Fluss einen falschen printf-Aufruf anstelle des beabsichtigten erreichte ...%lu
, ausgebrochen ist:%
- startet eine "Konvertierungsspezifikation";l
- der Längenmodifikatorl
bedeutet "[unsigned] long int";u
- Der Konvertierungsspezifiziereru
dient zumunsigned int
Ausdrucken als Dezimalzahl. Da wir den Längenmodifikator angegeben habenl
, akzeptiert er dann einenunsigned long int
. Die Buchstaben müssen in dieser Reihenfolge sein: Prozent, Länge, Umrechnung. (Es gibt ein paar weitere Optionen, wie Breite und Präzision, die Sie hinzufügen können. Siehe die Manpage , da sie all dies genau dokumentiert!)%lu
für unsignierte lange%llu
für unsigned long longquelle
Für int
%d
Für lange int
%ld
Für lange lange int
%lld
Für unsigned long long int
%llu
quelle
Aus allen Kombinationen versucht sie,
%ld
und%lu
sind die einzigen, die gültige printf Formatbezeichüberhaupt sind.%lu
(lange vorzeichenlose Dezimalzahl)%lx
oder%lX
(langes Hex mit Klein- oder Großbuchstaben) und%lo
(langes Oktal) sind die einzigen gültigen Formatbezeichner für eine Variable vom Typ vorzeichenlose lange (natürlich können Sie Feldbreiten-, Genauigkeits- usw. Modifikatoren zwischen den Modifikatoren hinzufügen%
und diel
).quelle
printf
angegeben wird, dass die genau richtigen Argumenttypen ohne die zulässigen Zulagen erforderlichva_arg
sind.Dies wird hilfreich sein. . .
quelle
Das Format ist
%lu
.Bitte überprüfen Sie über die verschiedenen anderen Datentypen und deren Verwendung in printf hier
quelle
Der richtige Bezeichner für unsigned long ist
%lu
.Wenn Sie nicht den genauen Wert erhalten, den Sie erwarten, kann es zu Problemen in Ihrem Code kommen.
Bitte kopieren Sie Ihren Code hier. Dann kann Ihnen vielleicht jemand besser sagen, wo das Problem liegt.
quelle
Ich hatte das gleiche Problem. Versuchen Sie "% ul", es funktioniert für mich.
quelle