函数参数,如 C 中的 printf

问题描述 投票:0回答:3

我想实现一个函数

Myprintf()
,它接受像
printf()
这样的参数。 现在我正在这样做:

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

我想将此函数调用替换为:

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

这怎么可能?

c printf
3个回答
16
投票
#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;
}

从你的问题中不清楚输出是如何完成的;你现有的

Myprintf()
大概会在某个地方输出它,也许是用
fprintf()
。 如果是这样的话,你可以这样写:

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

如果您不想使用返回值,请将函数声明为

void
并且不用理会变量
rc

这是“

printf()
覆盖函数”的相当常见的模式。


1
投票

您需要定义一个带有可变参数的函数,并使用vsprintf来构建字符串。


1
投票

printf
及其相关函数属于称为可变参数函数的函数系列,并且 C 标准库中的
<stdarg.h>
标头中有宏/函数来操作可变参数列表。查看 GNU 文档中的示例:如何定义和使用可变参数函数

© www.soinside.com 2019 - 2024. All rights reserved.