2017-10-12 1 views
-5

scanf nimmt ein Zeigerargument .. Warum können wir nicht eine Zeigervariable übergeben?Was ist falsch an der Verwendung von scanf mit einem Zeiger ohne Initialisierung?

int* x; 
scanf("%d", x); 
printf("%d", *x); 

Diese geben nicht ausgegeben .. Warum? Was ist falsch?

+4

Bitte lesen Sie ein Anfänger-Level C Buch. Zunächst müssen Sie die Variable initialisieren ... – Lundin

+0

Vielen Dank ... Ein Zeiger muss zuerst einen Wert haben ... Jetzt funktioniert es .. int a = 0; int * x = & a; scanf ("% d", x); printf ("% d", * x); – EarlyManX215

Antwort

1

Das %d Formatbezeichner zu scanf erwartet einen Zeiger auf ein int, das heißt ein int *, das ist, was Sie vorbei. Also rufst du die Funktion richtig an.

Wo Sie schief gegangen ist, dass der Zeiger x wurde nie initialisiert und zeigt daher nirgends. scanf versucht dann, diesen unitären Wert als Adresse zu lesen und anschließend zu lesen, was sich an dieser falschen Adresse befindet. Das Lesen eines nicht initialisierten Werts ruft undefined behavior auf.

Sie müssen x Punkt irgendwo machen, entweder durch die Adresse eines int Variablen zugewiesen wird oder durch malloc mit dynamischen Speicher zuzuweisen.

int a; 
int *x = &a; 

Oder:

int *x = malloc(sizeof(int)); 
Verwandte Themen