2013-03-08 21 views
7

あらかじめお詫び申し上げます。ここで文字を印刷する*

は私の構造体のDEFである:

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

私は、関数vcard_show(のvCard *のC)で、この構造体の表現を印刷しようとしていますが、コンパイラが警告をバック投げている:

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

コンパイル:*: "警告フォーマット '%cが' 'INT' と入力期待しますが、引数2 'は、char *を' 型を持つ"

がcharのシンボルC%ではないですか?

答えて

13

ためです。 %cは1文字(char)用です。

型の後のアスタリスク*は、型を指すポインタにします。したがって、実際にはchar*は文字へのポインタです。 Cでは、文字列の最初の文字にポインタを渡すことによって文字列が参照渡しされます。文字列の最後は、文字列の最後の文字の後のバイトをNULL(0)に設定することによって決定されます。あなたはについての私達に言っていないいくつかのtypedefを持っていない限り

+1

ありがとうございます! –

5

char *のプロパティタイプコードは%sです。 %cchar(1つだけcharないポインタ)あなたは、文字列(char型*)のためである、%sを使用したい

+1

おかげで助けをたくさん! –

2

、あなたはおそらく、このようなvcard_show()を宣言する必要があります

void vcard_show(struct vcard *c) 
+1

はい、私はtypedefを省略しました!ありがとう、結構です。 –