2013-03-08 11 views
7

Aptal soru için şimdiden özür dilerim! İşte Mat Baskı *

benim yapı def:

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

ben işlev vcard_show (vcard * c) Bu yapının bir temsilini yazdırmaya çalışıyorum, ancak derleyici bir uyarı geri atıyor:

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

derlenmiş: *: "uyarı biçimi '% c' 'int' yazın beklediğini, ancak argüman 2 'char *' türünde olup"

char sembolü c% değil midir?

cevap

13

içindir. %c tek karakterler içindir (karakter).

Bir tür sonra * yıldız işareti yazmayı işaretçi yapar. Yani char* aslında bir karakterin işaretçisidir. C'de, dizeler, işaretçiyi dizenin ilk karakterine geçirerek geçirilir. Dizenin sonu, dizenin son karakterinden sonra baytın NULL (0) olarak ayarlanmasıyla belirlenir. Eğer bize söylemiyorlar bazı typedef yoksa

+1

Çok teşekkür ederim! –

5

char * için kodlama özellik türü %s'dur. %c bir char (sadece tek char değil pointer) Sen dizeleri (char *) için olan %s kullanmak istediğiniz

+1

Teşekkür yardım için bir sürü! –

2

, muhtemelen böyle vcard_show() ilan etmeli:

void vcard_show(struct vcard *c) 
+1

Evet, yazdım! Yine de teşekkürler. –