Je ne peux jamais comprendre comment imprimer un unsigned long
type de données en C.
Supposons que unsigned_foo
c'est un unsigned long
, alors j'essaye:
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)
Et tous impriment une sorte de -123123123
numéro au lieu de unsigned long
celui que j'ai.
c
printf
long-integer
unsigned
format-specifiers
Bodacydo
la source
la source
%lu
travaillé cette fois. Merci. Quelque chose d'autre a dû se produire avant et cela n'a pas fonctionné.%lu
. Techniquement, c'est un comportement indéfini, mais en réalité, la variable a une valeur imprévisible qui est transmise à printf que printf interprète ensuite comme non signée. Je suppose que le problème d'origine de bodacydo était que le flux atteignait un appel printf incorrect au lieu de celui prévu ...%lu
, éclaté est:%
- démarre une "spécification de conversion";l
- le modificateur de longueur,l
signifie "[unsigned] long int";u
- le spécificateur de conversion,u
est destinéunsigned int
à être imprimé sous forme décimale. Parce que nous avons donné le modificateur de longueurl
, il accepte alors ununsigned long int
. Les lettres doivent être dans cet ordre: pourcentage, longueur, conversion. (Il y a quelques options supplémentaires, telles que la largeur et la précision, que vous pouvez ajouter. Voir la page de manuel , car elle documente tout cela précisément!)%lu
pour long non signé%llu
pour non signé long longla source
Pour int
%d
Pour long int
%ld
Pour long long int
%lld
Pour non signé long long int
%llu
la source
De toutes les combinaisons que vous avez essayé,
%ld
et%lu
sont les seuls qui sont valides format printf spécificateurs du tout.%lu
(décimal long non signé),%lx
ou%lX
(hex long avec des lettres minuscules ou majuscules) et%lo
(octal long) sont les seuls spécificateurs de format valides pour une variable de type non signé long (bien sûr, vous pouvez ajouter des modificateurs de largeur de champ, de précision, etc. entre les%
et lel
).la source
printf
est spécifié pour exiger les types d'arguments corrects exacts sans les tolérances quiva_arg
auraient.Ce sera utile. . .
la source
Le format est
%lu
.Veuillez vérifier les différents autres types de données et leur utilisation dans printf ici
la source
Le spécificateur correct pour le long non signé est
%lu
.Si vous n'obtenez pas la valeur exacte que vous attendez, il peut y avoir des problèmes dans votre code.
Veuillez copier votre code ici. Alors peut-être que quelqu'un pourra mieux vous dire quel est le problème.
la source
J'ai eu le même problème. Essayez "% ul", cela fonctionne pour moi.
la source