2016-12-12 2 views
0

Ich lerne c, ein Anfänger, kann mir bitte jemand erklären, welches Konzept fehlt mir? Und danke im Voraus.Warum stürzt das Programm beim Dereferenzieren des Zeigers auf char mit '% s' ab?

#include<stdio.h> 

int main() 
{ 
    char s[10]; 
    s[0]='A'; 
    s[1]='B'; 
    s[2]='\0'; 
    char *p; 
    int i; 

    p=s; 


    printf("%c\n", *p); //It's ok. 


    printf("%s", *p); // or *s...what's wrong here,why does program crash? 

    return 0; 
} 
+2

weil es einen Zeiger erwartet und nicht der dereferenzierte Wert. –

+1

'% s' erwartet ein' char * ', kein' char'. –

+0

Aktivieren Sie alle Compilerwarnungen. Ein guter Compiler hätte vor 'char * p gewarnt; ... printf ("% s", * p); '. – chux

Antwort

4

ändern

printf("%s", *p); 

zu

printf("%s", p); 

Der Grund dafür ist, dass %s einen Zeiger erwartet, und *p ist der dereferenzierte Wert bei p, auch bekannt als der char-Wert bei p[0].

Wenn dies keinen Sinn ergibt, Bild, warum printf("%c\n", *p) funktioniert. *p ist das gleiche wie p[0], das ist das gleiche wie s[0] seit Punkte auf s. Denn s[0] ist ein char, %c funktioniert hier, weil es eine char erwartet. Aber %s erwartet auf der anderen Seite char *.

+0

Danke, habe ich jetzt verstanden, da '% s' char * erwartet! –

+0

@Sumon kein Problem, wenn Sie die Antwort hilfreich fanden dann vergessen Sie nicht zu upvote oder akzeptieren Sie die Antwort. Viel Glück beim Codieren! –

+0

Das ist meine erste Frage hier. Und wurde schnell gelöst. Es ist cool! :) –

0

Sie möchten printf("%s", p). Den Zeiger nicht dereferenzieren.

Verwandte Themen