2016-11-03 1 views
-1

Ich habe den folgenden Code, wich ich schwer zu verstehen, warum es so funktioniert, es funktioniert:Warum sieht ein Scanf so aus, als würde sich das Verhalten von char * ändern?

char* str = "HELLO"; 
printf("%s",&str[0]); //Returns Hello as expected 
printf("%c",str[2]); //Returns L as aspected 
scanf("%s",&str); //I enter aaaa 
printf("%s\n",&str); /* If I want to access the word I have to do this way 
&str[0] now gives a segmentation fault.*/ 
printf("%c\n",&str[1]); /*This gives a b???!!!. I haven't found any way to 
access individual character with *str.*/ 

ich in besonders interessiert bin, warum sieht es keinen Weg, um die einzelnen Zeichen zuzugreifen, obwohl in Irgendwie macht es Sinn, schließlich soll man einen Zeiger auf char deklarieren, ich frage mich, wie es irgendwie als String funktionieren kann. Aber ich würde gerne wissen, warum der erste als eine Reihe von Zeichen wie erwartet funktioniert und nicht die zweite.

Danke.

+1

Sie benötigen a) Compiler-Warnungen und b) ein gutes Handbuch. –

+1

Aktivieren Sie Warnungen in Ihrem Compiler und behandeln Sie sie als Fehler. –

+0

@ user2638180: Sie können die Antwort akzeptieren, indem Sie auf das graue Häkchen unterhalb der Punktzahl klicken. – chqrlie

Antwort

2

scanf("%s",&str); undefinierten Verhalten ruft: Sie scanf bitten, eine Zeichenfolge zu lesen und speichern sie in die Lage des str Zeiger selbst, nicht den Ort verweist er auf, die ein Zeichenfolgenliteral, die nicht entweder geändert werden sollte.

Verwandte Themen