Bạn có thể cho chúng tôi các chức năng kiểu vsprintf để in kiểu in cho thông số độ dài biến của bạn. Tuy nhiên, không có việc tái đấu thầu để làm như vậy. Bạn có thể nếu bạn chọn viết hàm của bạn để tiếp tục chấp nhận tham số cho đến khi nó gặp một con trỏ null.
va_list ap;
char *param;
va_start(ap,fmt);
param = va_arg(ap,char*);
while(param)
{
do something...
param = va_arg(ap,char*);
}
hoặc bạn có thể có số lượng các thông số như param đầu tiên chức năng của bạn
void my_printf(int param_num,...)
{
va_list ap;
char *param;
va_start(ap,fmt);
while(param_num)
{
do something...
param = va_arg(ap,char*);
param_num--;
}
}
của nó thực sự tùy thuộc vào bạn, khả năng là vô hạn. Tôi nghĩ rằng yêu cầu thực sự duy nhất cho hình elip là nó có ít nhất một tham số trước dấu ba chấm.
Làm cách nào để biết bộ đệm đủ lớn? Và bạn thực sự nên trả về số lượng chuyển đổi được thực hiện bởi sprintf(), người dùng khác không có cách nào để biết chức năng này hoạt động. –
Tôi vạch ra mọi thứ không cần thiết để minh họa quan điểm của tôi. Rõ ràng trong mã phát hành của tôi, tôi hoàn toàn kỹ lưỡng hơn :) – Mike