web-dev-qa-db-ja.com

%ulと%lu C形式指定子の違いは何ですか?

「C Primer Plus」の例では、作成者はnsigned longに対して(scanfとprintfの両方で)%ul形式指定子を使用しています。問題を一般化しようとすると、%ulが私のコンピュータで何か問題を起こしているようです。しかし、%luを使用することで問題は解決しました。

実際、問題とコードの行に焦点を当てるのではなく、%ul%luの違いについて知りたいのです。多分私は何が悪いのかを理解することができました。

検索しても、私に役立つものはありません(「それらが異なる」ということを除いて)。

説明やリンク/リファレンスはありがたいです。

10
pedyram

%luは正しいですが、%ulが正しくありません

printf 形式指定子は、%[flags][width][.precision][length]specifierの形式に従います。

u指定子で、「符号なし10進整数」を意味します。

llength修飾子で、「長い」という意味です。

length修飾子は、変換specifierの前に置く必要があります。つまり、%luは正しいです。

36