9

I want to implement a function Myprintf() that takes arguments like printf(). Now I am doing this by:

sprintf(demoString, "Num=%d String=%s", num, str);
Myprintf(demoString);

I want to replace this function call as:

Myprintf("Num=%d String=%s", num, str);

How is this possible?

1

3 Answers 3

17
#include <stdio.h>
#include <stdarg.h>

extern int Myprintf(const char *fmt, ...);

int Myprintf(const char *fmt, ...)
{
    char buffer[4096];
    va_list args;
    va_start(args, fmt);
    int rc = vsnprintf(buffer, sizeof(buffer), fmt, args);
    va_end(args);
    ...print the formatted buffer...
    return rc;
}

It isn't clear from your question exactly how the output is done; your existing Myprintf() presumably outputs it somewhere, maybe with fprintf(). If that's the case, you might write instead:

int Myprintf(const char *fmt, ...)
{
    va_list args;
    va_start(args, fmt);
    int rc = vfprintf(debug_fp, fmt, args);
    va_end(args);
    return rc;
}

If you don't want to use the return value, declare the function as void and don't bother with the variable rc.

This is a fairly common pattern for 'printf() cover functions'.

Sign up to request clarification or add additional context in comments.

Comments

2

The printf and its relatives are in a family of functions called variadic functions and there are macros/functions in the <stdarg.h> header in the C standard library to manipulate variadic argument lists. Look at the GNU docs for examples: How Variadic Functions are Defined and Used.

Comments

1

You need to define a function with variable arguments, and use vsprintf to build the string.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.