2014-05-25 12 views
6

W przykładzie "C Primer Plus" autor użył specyfikatora formatu %ul (w obu scanf i printf) dla unsigned long. Kiedy próbuję uogólnić problem, wygląda na to, że %ul robi coś złego na moim komputerze. Ale użycie numeru %lu rozwiązało problem.Jaka jest różnica między specyfikatorami% ul i% lu C?

W rzeczywistości, zamiast skupiać się na problemie i linii kodów, chcę wiedzieć o różnicy między %ul i %lu. Może mógłbym dowiedzieć się, co jest nie tak.

Wyszukiwanie nie daje mi czegoś użytecznego (z wyjątkiem tego, że "są różne").

Wszelkie wyjaśnienia lub linki/odniesienia są mile widziane.

Odpowiedz

25

%lu jest poprawna, a %ul jest niepoprawna .

Specyfikator formatu w postaci jest zgodny z formularzem %[flags][width][.precision][length]specifier.

u to specyfikator oznaczający "niepodpisaną liczbę całkowitą".

l to długość modyfikator oznaczający "długi".

długość modyfikator powinien przejść przed konwersją specyfikatora, co oznacza %lu jest poprawne.

+7

'% ul' jest poprawny, ale nie zadziała, ponieważ oczekuje się PO. Wypisze numer z końcówką 'l' na końcu, ponieważ jest to'% u', 'l' jest poza formatem –

+0

@ LưuVĩnhPhúc Great point. –