15

ばかげた質問を事前にお詫びします!

ここに私の構造体定義があります:

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 *' です」

%c は char* の記号ではありませんか?

4

3 に答える 3

25

%s文字列 (char*) 用のを使用します。%c単一文字 (char) 用です。

型の後のアスタリスク*は、型へのポインターになります。実際char*には、文字へのポインターも同様です。C では、文字列は、文字列の最初の文字へのポインターを渡すことによって参照渡しされます。文字列の末尾は、文字列の最後の文字の後のバイトを NULL (0) に設定することによって決定されます。

于 2013-03-08T00:20:44.510 に答える
5

のプロパティ タイプのエンコーディングchar *%s. %cですchar(ポインターではなく、単一のchar

于 2013-03-08T00:20:35.867 に答える
3

伝えていない typedef がない限り、おそらく次vcard_show()のように宣言する必要があります。

void vcard_show(struct vcard *c)
于 2013-03-08T00:27:12.870 に答える