相关疑难解决方法(0)

传递可变数量的参数

假设我有一个带有可变数量参数的C函数:如何调用另一个函数,该函数需要从其内部获取可变数量的参数,并将所有参数传递到第一个函数中?

例:

void format_string(char *fmt, ...);

void debug_print(int dbg_lvl, char *fmt, ...) {
    format_string(fmt, /* how do I pass all the arguments from '...'? */);
    fprintf(stdout, fmt);
 }
Run Code Online (Sandbox Code Playgroud)

c variadic-functions

325
推荐指数
7
解决办法
17万
查看次数

C++中可变数量的参数?

如何编写一个接受可变数量参数的函数?这可能吗,怎么样?

c++ variadic-functions

251
推荐指数
10
解决办法
31万
查看次数

C编程中无效指针的概念

是否可以在C编程语言中取消引用void指针而不使用类型转换?

另外,有没有任何方法可以概括一个可以接收指针并将其存储在void指针中的函数,并且通过使用该void指针,我们可以创建一个通用函数吗?

例如:

void abc(void *a, int b)
{
   if(b==1)
      printf("%d",*(int*)a);     // If integer pointer is received
   else if(b==2)
      printf("%c",*(char*)a);     // If character pointer is received
   else if(b==3)
      printf("%f",*(float*)a);     // If float pointer is received
}
Run Code Online (Sandbox Code Playgroud)

我想在不使用if-else语句的情况下使这个函数变得通用 - 这可能吗?

此外,如果有很好的互联网文章解释了无效指针的概念,那么如果你能提供这些URL会很有用.

是否可以使用void指针进行指针算术?

c void-pointers

127
推荐指数
5
解决办法
20万
查看次数

将变量参数传递给另一个接受变量参数列表的函数

所以我有2个函数都有相似的参数

void example(int a, int b, ...);
void exampleB(int b, ...);
Run Code Online (Sandbox Code Playgroud)

现在example调用exampleB,但是如何在不修改的情况下传递变量参数列表中的变量exampleB(因为这已经在别处使用过了).

c++ variadic-functions

101
推荐指数
5
解决办法
7万
查看次数

将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万
查看次数

用自定义条件包装 printf

如果某些条件为真,我只想打印 printf。我知道 printf 是一个可变参数函数,但遗憾的是我似乎无法在这里找到任何解释我可以包装它的线程。

基本上我写的代码中的每一个:

printf(" [text and format] ", ... args ...);
Run Code Online (Sandbox Code Playgroud)

我想写一些类似的东西

my_custom_printf(" [text and format] ", ... args ...);
Run Code Online (Sandbox Code Playgroud)

然后是这样实现的:

int my_custom_printf(const char* text_and_format, ... args ...)
{
    if(some_condition)
    {
        printf(text_and_format, ... args...);
    }
}
Run Code Online (Sandbox Code Playgroud)

条件的第一个版本将独立于 args(它将在某个全局变量上),但将来可能会成为需要的条件一个参数。

无论如何,现在我只需要... args ...原型中的语法和my_custom_printf.

我正在使用 GCC,但我不知道哪个 C 标准 - 但我们可以尝试一下。

c customization printf variadic-functions

3
推荐指数
1
解决办法
274
查看次数

将变量参数列表传递到系统日志

我尝试将可变参数列表传递给另一个函数。已经有一个非常相似的问题:如何将可变数量的参数传递给 printf/sprintf 但对我来说它不起作用。我不知道为什么。这是我的功能:

void printSyslogNotice(const char *fmt, ...)
{
      va_list ap;
      va_start(ap, fmt);
      #ifdef __XENO__
         rt_syslog(LOG_NOTICE, fmt, ap);
      #else
         syslog(LOG_NOTICE, fmt, ap);
      #endif
      va_end(ap);
}
Run Code Online (Sandbox Code Playgroud)

当我用以下方式调用它时:

printSyslogNotice("%s %i", "hello world", 5);
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:#010 -939524064

不用说,我想要这个输出:hello world 5

有人有想法吗?

c++ syslog parameter-passing

1
推荐指数
1
解决办法
1943
查看次数