c - va_list का उपयोग करके कॉल प्रिंट करें




printf variadic-functions (3)

void TestPrint(char* format, ...)
{
    va_list argList;

    va_start(argList, format);
    printf(format, argList);
    va_end(argList);
}


int main()
{
    TestPrint("Test print %s %d\n", "string", 55);
    return 0;
}

मुझे पाना होगा:

Test print string 55

दरअसल, मुझे कचरा उत्पादन मिलता है। इस कोड में क्या गलत है?


इसके बजाय vprintf() उपयोग करें।


जैसा कि दूसरों ने पहले ही बताया है: इस मामले में आपको इसके बजाय vprintf उपयोग करना चाहिए।

लेकिन अगर आप वास्तव में printf को लपेटना चाहते हैं, या एक फ़ंक्शन लपेटना चाहते हैं जिसमें v... संस्करण नहीं है, तो आप गैर-मानक __builtin_apply सुविधा का उपयोग करके GCC में कर सकते हैं:

int myfunction(char *fmt, ...)
{
    void *arg = __builtin_apply_args();
    void *ret = __builtin_apply((void*)printf, arg, 100);
    __builtin_return(ret);
}

__builtin_apply का अंतिम तर्क अधिकतम है। बाइट्स में तर्कों का कुल आकार। सुनिश्चित करें कि आप यहां एक मूल्य का उपयोग करते हैं जो काफी बड़ा है।


यह नहीं है कि आप printf() उपयोग कैसे करते हैं। यदि आप va_lists का उपयोग करना चाहते हैं, तो इसके बजाय vprintf() उपयोग करें। here देखें संदर्भ







variadic-functions