2014-05-25 24 views
6

In un esempio di "C Primer Plus", l'autore ha utilizzato lo specificatore di formato %ul (in scanf e printf) per lungo senza firma. Quando provo a generalizzare il problema, sembra che lo %ul comporti qualcosa di sbagliato nel mio computer. Ma usando %lu risolto il problema.Qual è la differenza tra gli specificatori di formato% ul e% lu C?

In realtà, piuttosto che concentrarsi sul problema e sulla linea di codici, voglio sapere la differenza tra %ul e %lu. Forse potrei capire cosa c'è che non va.

La ricerca non mi dà qualcosa di utile (tranne che "sono diversi").

Qualsiasi spiegazione o collegamento/riferimento è apprezzata.

risposta

25

%lu è corretto, mentre %ul è errato.

Un identificatore di formato printf segue il modulo %[flags][width][.precision][length]specifier.

u è un specificatore che significa "numero intero decimale senza segno".

l è un lunghezza che significa "lungo".

Il lunghezza modificatore dovrebbe andare prima della conversione specificatore, che significa %lu è corretto.

+7

'% ul' è corretto ma non funzionerà come previsto dall'OP. Stamperà il numero con suffisso 'l' alla fine perché è solo'% u', 'l' è al di fuori del formato –

+0

@ LưuVĩnhPhúc Ottimo punto. –