2016-10-15 3 views
1

Ich versuche, den Absatz mit scanf() Funktion in C zu lesen. So , Zuerst versuchte ich den Code unten,Warum Segmentierungsfehler beim Verwenden der Zeigervariablen auftreten?

#include <stdio.h> 
int main() 
{ 
char Input[100]; 
printf("Please give the paragraph\n"); 
scanf("%[^EOF]\n",Input); 
printf("\n\n%s\n\n",Input); 
return 1; 
} 

Es funktioniert gut, es den Absatz der Eingabe von stdin erhalten und ausdrucken. Dann habe ich versucht, die gleiche Sache mit Zeigern wie unten angegeben,

#include <stdio.h> 
int main() 
{ 
char *Input; 
printf("Please give the paragraph\n"); 
scanf("%[^EOF]\n",Input); 
printf("\n\n%s\n\n",Input); 
return 1; 
} 

Dieser Code auch die Eingabe als auch die Ausgabe richtig drucken. Aber es wirft die segmentation fault error while the program terminating. Also muss ich wissen, warum der Fehler beim Beenden auftreten?

Wenn der Zeiger keinen Speicher zeigt, wie die printf() die angegebene Eingabe druckt und von wo es druckt?

Danke.

+2

Da der Zeiger nicht aktiviert ist. Es enthält Müll, so dass Sie 'scanf' sagen, um an einen Müllort zu schreiben. Und die Tatsache, dass es "richtig" ausgibt, bedeutet nicht, dass alles in Ordnung ist. Es bedeutet nur, dass Sie Glück hatten ... diese Zeit. Es kann zu falschen Ergebnissen führen oder jederzeit abstürzen. Dies wird Undefiniertes Verhalten genannt. – kaylum

+0

Es ist nicht das Drucken, das ist das Problem; es ist das Lesen. Sie wissen nicht, wo die Daten platziert wurden, da der Zeiger auf unbestimmten Speicherplatz zeigt - Sie müssen Speicherplatz zuweisen. Wenn Sie ein Array verwendet haben, haben Sie Speicherplatz bereitgestellt. Wenn Sie einen nicht initialisierten Zeiger verwenden, tun Sie dies nicht. –

+0

'scanf ("% [^ EOF] \ n ", Eingabe)' - Ich schlage vor, die Dokumentation für scanf zu lesen, anstatt zu raten –

Antwort

0

Da Input ist ein Zeiger auf nichts im Besonderen und hat keinen Wert insbesondere, übergibt seinen Wert scanf macht keinen Sinn. Weisen Sie ihm zuerst einen Wert zu - lassen Sie ihn auf etwas zeigen - und dann können Sie ihn verwenden, um scanf mitzuteilen, wo er Dinge speichern soll.

Verwandte Themen