Tôi có một cấu trúc để đại diện cho chuỗi trong bộ nhớ tìm kiếm như thế này:Sử dụng size_t để xác định độ chính xác của một chuỗi trong printf C
typedef struct {
size_t l;
char *s;
} str_t;
Tôi tin rằng sử dụng size_t làm cho tinh thần để xác định độ dài của một chuỗi char . Tôi cũng muốn in chuỗi này bằng cách sử dụng printf("%.*s\n", str.l, str.s)
. Tuy nhiên, độ chính xác *
mong đợi đối số int
, không phải là size_t
. Tôi đã không thể tìm thấy bất cứ điều gì có liên quan về điều này. Có cách nào để sử dụng cấu trúc này một cách chính xác, mà không cần truyền tới int
trong cuộc gọi printf()
?
bạn không có kế hoạch vô hiệu hóa 'char *'? Nếu nó không kết thúc, tôi không thấy những gì thiết lập độ chính xác cho chiều dài sẽ giúp bạn có được ở nơi đầu tiên. Ngoài ra, tôi nghĩ rằng các lựa chọn của bạn là: cast hoặc thay đổi 'size_t' thành' int' và không bao giờ cho phép nó là tiêu cực. –
@EvanTeran Các chuỗi thực sự trỏ tới các phần trong bộ đệm lớn hơn, do đó ký tự 'null' ở đâu đó xa hơn. Kích thước của một 'int' không phải là một vấn đề, vì các chuỗi thường là một vài trăm byte. Điều làm tôi thất vọng là mặc dù 'size_t' sẽ phù hợp với mục đích này một cách độc đáo, C99 không định nghĩa một công cụ sửa đổi độ chính xác đặc biệt chấp nhận một đối số' size_t'. –