2013-03-08 22 views
7

Tôi xin lỗi trước vì câu hỏi ngớ ngẩn!In một Char *

Đây là def struct của tôi:

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

Tôi cố gắng để in một đại diện của struct này với chức năng vcard_show (vcard * c), nhưng trình biên dịch được ném trở lại một cảnh báo:

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

Khi được biên soạn: "cảnh báo: định dạng '% c' dự kiến ​​nhập 'int', nhưng đối số 2 có loại 'char *'"

Không phải% c biểu tượng cho char *?

Trả lời

13

Bạn muốn sử dụng %s, là dành cho chuỗi (char *). %c dành cho các ký tự đơn (char).

Dấu hoa thị * sau một loại làm cho nó trở thành con trỏ để nhập. Vì vậy, char* thực sự là một con trỏ đến một ký tự. Trong C, các chuỗi được truyền qua tham chiếu bằng cách chuyển con trỏ tới ký tự đầu tiên của chuỗi. Sự kết thúc của chuỗi được xác định bằng cách thiết lập byte sau ký tự cuối cùng của chuỗi thành NULL (0).

+1

Cảm ơn bạn rất nhiều! –

5

Mã hóa loại thuộc tính cho char *%s. %c là dành cho char (không phải con trỏ chỉ là một đơn char)

+1

Cảm ơn rất nhiều sự giúp đỡ! –

2

Trừ khi bạn có một số typedef bạn không nói cho chúng ta về, có lẽ bạn nên tuyên bố vcard_show() như thế này:

void vcard_show(struct vcard *c) 
+1

Có, tôi đã bỏ qua typedef của mình! Cảm ơn bạn mặc dù. –

Các vấn đề liên quan