2013-03-08 5 views
7

Mi scuso in anticipo per la domanda stupida!Stampa di un Char *

Ecco il mio struct DEF:

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

Sto provando a stampare una rappresentazione di questa struct con la funzione vcard_show (vCard * c), ma il compilatore sta gettando indietro un avvertimento:

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); 
} 

Quando compilato: "warning: formato '% c' si aspetta tipo 'int', ma l'argomento 2 ha tipo 'char *'"

non è% c il simbolo per char *?

risposta

13

Si desidera utilizzare %s, che è per archi (char *). %c è per caratteri singoli (carattere).

Un asterisco * dopo un tipo lo rende un puntatore da digitare. Quindi char* è in realtà un puntatore a un personaggio. In C, le stringhe vengono passate per riferimento passando il puntatore al primo carattere della stringa. La fine della stringa viene determinata impostando il byte dopo l'ultimo carattere della stringa su NULL (0).

+1

Grazie mille! –

5

La codifica del tipo di proprietà per un char * è %s. %c è per una char (non il puntatore solo una singola char)

+1

Grazie mille per l'aiuto! –

2

A meno che non si dispone di una certa typedef non ci dici riguardo, probabilmente si dovrebbe dichiarare vcard_show() come questo:

void vcard_show(struct vcard *c) 
+1

Sì, ho omesso il mio typedef! Grazie comunque. –