Cで「unsigned long」を印刷する方法は?


342

unsigned longCでデータ型を出力する方法を理解できません。

がであるunsigned_fooとするunsigned longと、私は試してみます:

  • 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)

そして、それらすべては私が持っているものの-123123123代わりにある種の数を印刷しunsigned longます。

回答:


499

%luはの正しい形式ですunsigned long。ここでは、メモリの破損や初期化されていない変数など、他にも問題があるようです。おそらくもっと大きな写真を見せてくれませんか?


12
%lu今回はうまくいきませんでした。ありがとう。他の何かが以前に起こったに違いないが、それはうまくいかなかった。
bodacydo

1
@bodacydo:バグがある場合、それはセミランダムに表示される可能性があります...印刷する前に、変数に有効な値があることを確認してください。
タナトス

1
変数が初期化されていない場合でも、printfがフォーマット指定子がのときにマイナス記号を出力できるようになるはずはありません%lu。技術的には未定義の動作ですが、実際には変数には予測できない値があり、それがprintfに渡され、printfはその後符号なしと解釈します。bodacydoの元々の問題は、フローが意図したものではなく、間違ったprintf呼び出しに到達することだったと思います...
R .. GitHub STOP HELPING ICE

8
@Anisha Kaul:%luは有効な変換指定ですが、%ulは無効です。%lu、ブレークアウトは次のとおりです%。—「変換仕様」を開始します。l—長さ修飾子。l「[unsigned] long int」を意味します。u-変換指定は、uのためのものであるunsigned int小数としてプリントアウトされます。長さ修飾子lを指定したので、を受け入れますunsigned long int。文字、パーセント、長さ、変換の順序でなければなりません。(幅や精度など、追加できるオプションがいくつかあります。これがすべて正確に記載されているので、manページを参照してください!)
Thanatos

1
%ulは(%uを使用して)符号なしで出力し、文字「l」をそのまま出力します。"%uw"が符号なしで印刷され、その後に文字 "w"が続くように。%はconvspecを開始し、u(またはd、s、c ...などの他の文字)がそれを終了します。
Veky

30
  • %lu以下のための符号なしlong
  • %llu以下のための署名のない長い長いです

13
ヨーダ規約:「unsigned long」「(l)ong(u)nsigned」です。
Reb.Cabin

28

以下のためのint型 %d

以下のためのlong int型 %ld

以下のための長い長いint型 %lld

以下のための符号なしlong long int型 %llu


23

あなたがしようとしたすべての組み合わせのうち、%ldおよび%luすべての有効なprintfの書式指定されているだけです。%lu(長い符号なし10進数)、%lxまたは%lX(小文字または大文字の長い16進数)、および%lo(長い8進数)は、unsigned long型の変数の唯一の有効な書式指定子です(もちろん、フィールド幅、精度などの修飾子を%l)。


1
%ldはstd :: numeric_limits <unsigned long> :: max()/ 2の値まで正常に動作します。その上では、%ldは誤った値(負の値)を出力します。
Kaushik Acharya 2013

1
@KaushikAcharya:いいえ、それ以上はUBです。そしてそれはおそらくそれより前のUBでさえprintfありますva_arg
R .. GitHub ICE HELPING ICEを停止する'12


9

形式は%luです。

他のさまざまなデータ型とそのprintf での使用法については、こちらを確認してください


2
非標準としてマークすることなく、さまざまな非標準の動作が文書化されています。POSIXは、printfの最もアクセスしやすいオンライン標準です。ISO Cを超える拡張機能は、「CX」タグでマークされてい
ます

8

unsigned longの正しい指定子は%luです。

期待どおりの正確な値が得られない場合は、コードに問題がある可能性があります。

ここにコードをコピーしてください。そうすれば、おそらく誰かが問題をよりよく教えてくれるでしょう。


-5

私も同じ問題を抱えていました。「%ul」を試してください。


6
この質問は8年以上前に広く回答されました。新しい答えが新しい情報を追加することを確認してください。さらに重要なのは正しいことです。
Gerhardh、2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.