%ul和%lu C格式说明符之间有什么区别?

在“C Primer Plus”的示例中,作者使用%ul格式说明符(在scanf和printf中)用于unsigned long 。 当我尝试概括问题时,似乎%ul在我的计算机中出错了。 但使用%lu解决了这个问题。

实际上,我不想关注问题和代码行,而是想知道%ul%lu之间的区别。 也许我可以弄清楚什么是错的。

搜索并没有给我一些有用的东西(除了“它们是不同的”)。

任何解释或链接/参考表示赞赏。

%lu是正确的,而%ul不正确的

printf格式说明符遵循格式%[flags][width][.precision][length]specifier

u是一个说明符,表示“无符号十进制整数”。

l长度修饰符,意思是“长”。

长度修饰符应该在转换说明符之前,这意味着%lu是正确的。