c - 将可变参数列表转发到 c 中的 ncurses printw 函数

标签 c variadic-macros

有人以多种不同的方式询问过这个问题。但是我仍然无法让它工作。这是我的函数定义。

void                                                                           
ncurses_add_line(const char *fmt, ...)                                         
{                                                                              
  if (ncurses_window) {                                                        
    va_list args;                                                              
    va_start(args, fmt);                                                       
    printw(fmt, args);                                                           
    printw("\n");                                         
    va_end(args);                                                              
  }                                                                            
}

当我调用此函数时,我的函数输出的可变参数打印出现乱码。如果我直接调用 printw 一切正常。例如,如果我像 ncurses_add_line("Hello %d", var) 这样调用 ncurses_add_line,我会得到一个不存储在 var 中的值。但是,如果我调用 printw("Hello %d", var),我会看到 var 的值显示在“Hello”旁边,如果 var == 1 则打印“Hello 1”使用 printwncurses_add_line 不是这种情况。

我需要改变什么?

我将其打包的原因是因为我不想包含在我的头文件中,而只包含在我的 c 文件中。

最佳答案

尝试使用 vwprintw 而不是 printwvwprintw以 va_list 作为参数。

您尝试使用的惯用语——将 va_list 传递给一个参数数量可变的函数——是行不通的。一种解决方案是找到一个可用的函数变体(在本例中为 vwprintw)。另一种方法是“展平”va_list:在这种情况下,您可以使用 vsprintf 创建格式化字符串,然后将其传递给 curses。

关于c - 将可变参数列表转发到 c 中的 ncurses printw 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40689470/

相关文章:

c++ - 如何在不使用 'L' 和 'R' 方向数组的情况下构建二叉树

c - UNS_32 在哪里定义的?

c - C 文本文件中的文件指针位置

c - zlib 写入原始编码流

c++ - 可变参数宏的 2 种不同语法

c++ - 从在非 GUI 线程中运行的 C 代码获取 QInputDialog::getText() 结果

c++ - ##__VA_ARGS__ 是什么意思?

c - 宏中的参数计数

c - 附加到 __VA_ARGS__

在 C 预处理器中转换十六进制字符串中的数字列表