有人以多种不同的方式询问过这个问题。但是我仍然无法让它工作。这是我的函数定义。
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”使用 printw
但 ncurses_add_line
不是这种情况。
我需要改变什么?
我将其打包的原因是因为我不想包含在我的头文件中,而只包含在我的 c 文件中。
最佳答案
尝试使用 vwprintw
而不是 printw
。 vwprintw以 va_list 作为参数。
您尝试使用的惯用语——将 va_list 传递给一个参数数量可变的函数——是行不通的。一种解决方案是找到一个可用的函数变体(在本例中为 vwprintw)。另一种方法是“展平”va_list:在这种情况下,您可以使用 vsprintf 创建格式化字符串,然后将其传递给 curses。
关于c - 将可变参数列表转发到 c 中的 ncurses printw 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40689470/