2016-04-03 8 views
-1

Ich würde gerne wissen, wie scanf Funktion in diesem Fall funktionierte.Funktionalität der scanf Funktion in c

main() 
{ 
    printf("%d\n",scanf("%d")); 
} 

Ausgabe:

./a.out

Hier ist die scanf auf eine Eingabe wartet ich eintrat 5.

Ich kann sehen, Das scanf ist erfolgreich und hat 1 zurückgegeben.

Ich habe wirklich nicht verstanden, wo die ganze Zahl 5 gespeichert ist.

+0

Dies ruft ein undefiniertes Verhalten hervor. –

+0

@OliverCharlesworth, Danke für die Antwort, ist es nur undefiniertes Verhalten, ich dachte, es könnte irgendeinen Grund für dieses Verhalten geben. – Ash

+0

Bitte erläutern Sie vollständig, warum Sie das geschrieben haben. –

Antwort

1

Die Ganzzahl 5 wurde nicht an einem bekannten Speicherort gespeichert, obwohl sie möglicherweise an einem völlig zufälligen Speicherort gespeichert wurde, da Sie keinen Speicherort dafür angegeben haben. Es ist ein Glück, dass dein Programm nicht abgestürzt ist. Dies ist völlig undefiniertes Verhalten.

scanf("%d") sollte die Adresse eines int folgen. Aber Sie sollten keinen Aufruf an scanf() in einer Parameterliste an erster Stelle.

+0

'scanf()' ist wie jede andere Funktion, die einen Wert zurückgibt. Wenn es in einer gültigen Weise aufgerufen wird (was in dieser Frage nicht der Fall ist), kann sein Rückgabewert an jede andere Funktion übergeben werden - einschließlich 'printf()'. – Peter

+0

@Peter Ich stimme völlig zu, aber ich denke, es ist schlechte Praxis, es auf diese Weise zu verwenden, insbesondere weil die Reihenfolge der Auswertung von Operanden in einem Funktionsaufruf implementierungsabhängig ist. – Logicrat

+0

@Logicrat Danke für Ihre Antwort. – Ash