2013-03-08 13 views
7

Ich entschuldige mich im Voraus für die dumme Frage!Drucken Char *

Hier ist meine struct def:

struct vcard { 
    char *cnet; 
    char *email; 
    char *fname; 
    char *lname; 
    char *tel; 
}; 

Ich versuche, eine Darstellung dieser Struktur mit der Funktion vcard_show (V-Card * c) zu drucken, aber der Compiler wirft eine Warnung zurück:

void vcard_show(struct vcard *c) 
{ 
    printf("First Name: %c\n", c->fname); 
    printf("Last Name: %c\n", c->lname); 
    printf("CNet ID: %c\n", c->cnet); 
    printf("Email: %c\n", c->email); 
    printf("Phone Number: %c\n", c->tel); 
} 

Wenn zusammengestellt: "Warnung: Format '% c' erwartet 2 'int', aber Argument Typ hat 'char *' geben" * für char

Is not% c das Symbol?

Antwort

13

Sie wollen %s verwenden, die für Zeichenketten (char *) ist. %c ist für einzelne Zeichen (char).

Ein Sternchen * nach einem Typ macht es ein Zeiger auf den Typ. So ist char* eigentlich ein Zeiger auf ein Zeichen. In C werden Zeichenfolgen übergeben, indem der Zeiger an das erste Zeichen der Zeichenfolge übergeben wird. Das Ende des Strings wird festgelegt, indem das Byte nach dem letzten Zeichen des Strings auf NULL (0) gesetzt wird.

+1

Vielen Dank! –

5

Die Eigenschaftstypcodierung für eine char * ist %s. %c ist für einen char (nicht der Zeiger nur ein einziges char)

+1

Vielen Dank für die Hilfe! –

2

Es sei denn, Sie einige typedef haben Sie nicht uns zu sagen, sollten Sie wahrscheinlich vcard_show() wie folgt erklären:

void vcard_show(struct vcard *c) 
+1

Ja, ich habe meine Typedef ausgelassen! Trotzdem danke. –