2017-09-02 5 views
-7
#include <stdio.h> 
//Compiler version gcc 6.3.0 

int main(void) 
{ 

    int a=10; 
    printf("%d"+1,a); 

    return 0; 
} 

Ausgabe. --- dKann mir jemand sagen, warum das passiert in c

#include <stdio.h> 
//Compiler version gcc 6.3.0 

int main(void) 
{ 

    #include <stdio.h> 
//Compiler version gcc 6.3.0 

int main(void) 
{ 

    int a=10; 
    printf("%d"+36,a); 

    return 0; 
} 

Ausgabe. --- p

mich erklären, warum das passiert ... Immer, wenn ich Wert von +1 ändern sie verschiedene Ausgänge drucken ...

+1

'Int' ist kein Typ (obwohl' int' ist). In jedem Fall ist deine Formatierung schrecklich. Bitte repariere. –

+2

@PySerialKiller Das ist nicht korrekt. –

+1

Kompilieren Sie das nächste Mal mit 'gcc -Wall -Wextra -g', um Warnungen und Debug-Informationen zu erhalten. –

Antwort

5

Das Verhalten des Codes nicht definiert ist.

"%d"+1 tatsächlich ist das Hinzufügen von 1 zu einem const char* Zeiger (die wörtlichen "%d" auf einen const char* Zeiger unter Umständen zerfallen), die Sie tatsächlich in die d wörtlichen in dieser Zeichenfolge nimmt! Der Formatierer printf ist daher für Ihre Argumente nicht geeignet.

"%d"+36 einfach geht in der Tat sehr schlechte Dinge zu tun, da Sie auf dem Speicher 36 Plätze nicht besitzen von Anfang an von "%d"

Sie nicht, dass Sie so etwas wie printf("%d", a + 1); & c.?

Zuletzt, was ist die Zwei ein Int? Meinst du nicht int?

+1

Und 'printf ("% d "+ 36, a); bringt Sie zu Ihrem Kernel-Code. –

Verwandte Themen