В чем разница между спецификаторами формата %ul и %lu C?

В примере "C Primer Plus" автор использовал спецификатор формата %ul (как в scanf, так и в printf) для unsigned long. Когда я пытаюсь обобщить проблему, мне кажется, что %ul делает что-то не так в моем компьютере. Но использование %lu решило проблему.

Собственно, вместо того, чтобы зацикливаться на проблеме и строке кодов, я хочу узнать о разнице между %ul и %lu. Может быть, я мог бы понять, что не так.

Поиск ничего полезного мне не дает (кроме того, что "они разные").

Любое объяснение или ссылка/ссылка приветствуются.


person pedyram    schedule 25.05.2014    source источник


Ответы (1)


%lu верно, а %ul неверно.

Спецификатор формата printf следует за формой %[flags][width][.precision][length]specifier.

u – это спецификатор, означающий "десятичное целое число без знака".

l — это модификатор length, означающий «длинный».

Модификатор length должен стоять перед спецификатором преобразования, что означает правильность %lu.

person Jonathon Reinhart    schedule 25.05.2014
comment
%ul правильно, но не будет работать так, как ожидается от OP. Он выведет число с суффиксом l в конце, потому что это просто %u, l вне формата - person phuclv; 25.05.2014