2010-02-08 43 views
5

Trong khi tôi đang làm việc, một nơi nào đó bên trong mã tôi thấy các mức độ sau đây. Tôi bị nhầm lẫn bởi trình định dạng định dạng trong sprintfThông số định dạng C

d_number = strtol(tmp_buf , (char **)NULL, 16); 
    memset(tmp_buf , ' ' , sizeof(tmp_buf)); 
    sprintf(tmp_buf , "%0.*d" , (int)sizeof(dec_number) , d_number ); 

ai cũng có thể giải thích?

+1

@qrdl: và điều đó hữu ích như thế nào, chính xác? Bạn có thể đã bỏ lỡ bản ghi nhớ, nhưng SO không bao giờ được dự định là một liên kết đơn giản tới Google. Nó được thiết kế để chứa các câu trả lời cho các câu hỏi lập trình lớn và nhỏ. Nếu bạn không có gì hữu ích để đóng góp, đừng bận tâm nhận xét. – jalf

+2

@jalf Lần truy cập đầu tiên là bài viết trên Wikipedia về printf và nó liệt kê tất cả các thông số định dạng và tham số chiều rộng. Tôi hy vọng điều này sẽ trả lời câu hỏi của bạn về tính hữu ích của nhận xét của tôi. Tôi tin tưởng mạnh mẽ rằng khả năng tìm kiếm thông tin là một trong những phẩm chất mạnh nhất của lập trình viên giỏi (giống như bất kỳ kỹ sư nào), vì vậy tôi thích đặt câu cá hơn là câu cá. Tôi tự hào là lập trình viên và không thích những người làm giảm giá thủ công của tôi. Vâng, và hãy chắc chắn rằng tôi nhận được một bản sao của bản ghi nhớ đó, ông Lumbergh. – qrdl

+0

@qdrl: Có. Nhận xét của bạn không hữu ích. Một trong những mục tiêu đã nêu của SO là cung cấp câu trả lời * mà không cần nói cho mọi người biết về nó. Nhưng hãy nói cho tôi biết, tại sao nó "làm rẻ thủ công của bạn" nếu mọi người truy cập stackoverflow.com và nhập "định dạng printf định dạng", nhưng nó đáng giá và hoàn toàn khác nếu họ truy cập google hoặc wikipedia và làm điều tương tự * chính xác? Tôi muốn nói rằng dấu hiệu của một lập trình viên tốt sẽ đến một trang * có liên quan * để tìm kiếm thông tin. Đối với các câu hỏi lập trình, SO là một trang web phù hợp hơn wikipedia, phải không? – jalf

Trả lời

0

Các * được thay thế bằng (int) sizeof (dec_number). Nếu số dec_number là int, trên nhiều máy, nó giống như% 0.4d. Đây là độ chính xác để in số nguyên hoặc số chữ số tối đa cần in.

Các * có thể xuất hiện ở hai bên, ví dụ "":

sprintf(tmp_buf, "%*.*", 0, (int)sizeof(dec_number), d_number); 

cũng làm việc.