相关疑难解决方法(0)

在C中转发可变参数函数的调用

在C中,是否可以转发可变参数函数的调用?如,

int my_printf(char *fmt, ...) {
    fprintf(stderr, "Calling printf with fmt %s", fmt);
    return SOMEHOW_INVOKE_LIBC_PRINTF;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,以上述方式转发调用显然不是必需的(因为你可以用其他方式记录调用,或者使用vfprintf),但是我正在处理的代码库要求包装器做一些实际的工作,并且没有没有(并且不能添加)类似于vfprintf的辅助函数.

[更新:基于迄今为止提供的答案,似乎存在一些混淆.用另一种方式表达问题:通常,你可以包装一些任意的可变参数函数而不修改该函数的定义.

c variadic

176
推荐指数
6
解决办法
6万
查看次数

如何将可变数量的参数传递给printf/sprintf

我有一个类,它包含一个"错误"函数,可以格式化一些文本.我想接受可变数量的参数,然后使用printf格式化它们.

例:

class MyClass
{
public:
    void Error(const char* format, ...);
};
Run Code Online (Sandbox Code Playgroud)

Error方法应该接受参数,调用printf/sprintf来格式化它然后用它做一些事情.我不想自己编写所有格式,因此尝试找出如何使用现有格式是有意义的.

c c++ printf variadic-functions

76
推荐指数
3
解决办法
11万
查看次数

printf和vprintf函数系列之间有什么区别,什么时候应该使用另一个?

据我了解,之间的差别printf,fprintf,sprintf等功能和vprintf,vfprintf,vsprintf等功能,与他们如何应对函数的参数做.但具体怎么样?有没有理由使用一个而不是另一个?我是否应该总是使用printf,因为在C中看起来更常见,或者是否有合理的理由选择vprintf

c

51
推荐指数
2
解决办法
2万
查看次数

使用va_list调用printf

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;
}
Run Code Online (Sandbox Code Playgroud)

我需要得到:

Test print string 55
Run Code Online (Sandbox Code Playgroud)

实际上,我得到了垃圾输出.这段代码有什么问题?

c printf variadic-functions

49
推荐指数
4
解决办法
5万
查看次数

如何用可变长度参数包装函数?

我希望用C/C++做到这一点.

我遇到了可变长度参数,但这表明使用libffi的 Python和C解决方案.

现在,如果我想用printf函数包装myprintf

我的工作如下:

void myprintf(char* fmt, ...)
{
    va_list args;
    va_start(args,fmt);
    printf(fmt,args);
    va_end(args);
}

int _tmain(int argc, _TCHAR* argv[])
{
    int a = 9;
    int b = 10;
    char v = 'C';
    myprintf("This is a number: %d and \nthis is a character: %c and \n another number: %d\n",a, v, b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但结果不如预期!

This is a number: 1244780 and
this is a character: h and
another number: 29953463
Run Code Online (Sandbox Code Playgroud)

我错过的任何一点?

c c++ variadic-functions

46
推荐指数
4
解决办法
3万
查看次数

将varargs传递给printf

我想要一个辅助函数log,基本上执行以下操作:

log(file, "array has %d elements\n", 10);
// writes "2014-02-03 16:33:00 - array has 10 elements" to &file
Run Code Online (Sandbox Code Playgroud)

我有时间部分,我有文件写入部分.然而,问题是方法签名本身log- 我应该放什么?表示printf声明以...关键字结束,但我如何在我的函数中使用它?

void log(FILE *f, const char * format, ...) // how would I pass ... to fprintf?
Run Code Online (Sandbox Code Playgroud)

让我编辑这个包含更多信息.

我有一个const char * now ()返回"2014-02-03 16:33:00"形式的字符串.我想像这样传递另一个格式字符串.这两个陈述应该是等同的:

log(file, "array has %d elements\n", 10);
fprintf(file, "%s - array has %d elements\n", now(), 10);
Run Code Online (Sandbox Code Playgroud)

我知道这vfprintf可以让我通过va_list,但我怎么能把它now() …

c printf function variadic-functions

12
推荐指数
2
解决办法
2万
查看次数

标签 统计

c ×6

variadic-functions ×4

printf ×3

c++ ×2

function ×1

variadic ×1