2016-07-23 9 views
-1

Warum druckt dieses Programm 4% statt nur 4?Warum druckt dieses c-Programm% nach dem Dezimalwert?

#include <stdio.h> 
int main() { 
    printf("%lu", sizeof(int)); 
    return 0; 
} 
+8

Sind Sie sicher, was gedruckt wird '%' ist nicht die Schale, aber Ihr Programm? Wenn ja, sollte es sein, weil Sie * undefiniertes Verhalten * aufgerufen haben, indem Sie Daten mit falschem Typ an 'printf()' übergeben haben. Das richtige Format zum Ausdrucken von 'size_t', das vom 'sizeof'-Operator zurückgegeben wird, ist'% zu'. – MikeCAT

+3

Ich wette, deine Shell ist C-Shell –

+2

Setzen Sie ein '\ n' nach der Zahl, um Ihre Shell zur nächsten Zeile zu bewegen (vorausgesetzt, die Shell ist diejenige, die das'% 'Zeichen ausgibt). – Cornstalks

Antwort

1

Zunächst einmal ergibt sizeof Operator ein Ergebnis vom Typ size_t. Sie sollten den Formatbezeichner %zu verwenden, um das Ergebnis zu drucken.

Die Verwendung eines falschen Formatbezeichners (nicht übereinstimmendes Argument für einen Formatbezeichner) ruft undefined behavior auf.

Das heißt, Sie kein Newline gedruckt werden, nachdem der Ausgang hatte, so dass es einfach in die Eingabeaufforderung Shell wieder geschieht sofort nach der Ausgabe, die Sie sehen .

+0

und Der Grund für den Downvote, irgendjemand? –

1

Dieses Programm druckt nur 4.

Sie könnten danach eine Shell-Eingabeaufforderung (%) erhalten.

Im Idealfall sollte es

printf("%zu\n", sizeof(int));//zu is the right format specifier for object of type size_t 

Hinweis ist, habe ich ein \n legte die Shell-Prompt in der nächsten Zeile zu erhalten.

0

Es ist einfach Drucken 4.

Ergebnis Codepad

Verwandte Themen