curs_printw(3X)

๐Ÿ’– curs_printw(3X) โ€” the "printf but make it curses" page ๐Ÿ’–

okay bestie so this is the manual for the curses library family of formatted-output functions: printw, wprintw, mvprintw, mvwprintw, vwprintw, and vw_printw. (yes that's six names, no I'm not okay, but we're doing this together ๐Ÿซถ)


โœจ NAME โœจ

printw, wprintw, mvprintw, mvwprintw, vwprintw, vw_printw โ€” write formatted output to a curses window ๐Ÿ’…


๐ŸŒธ SYNOPSIS ๐ŸŒธ

#include <curses.h>

int printw(const char *fmt, ...);
int wprintw(WINDOW *win, const char *fmt, ...);
int mvprintw(int y, int x, const char *fmt, ...);
int mvwprintw(WINDOW *win, int y, int x, const char *fmt, ...);

int vw_printw(WINDOW *win, const char *fmt, va_list varglist);

/* obsolete */
int vwprintw(WINDOW *win, const char *fmt, va_list varglist);

๐Ÿฆ‹ DESCRIPTION ๐Ÿฆ‹

so printw, wprintw, mvprintw, and mvwprintw are literally just printf(3)'s cousins. like, the string that printf(3) would have output? instead it gets output as though waddstr(3X) were used with win (or stdscr) as its first argument. same energy, different destination ๐ŸŽ€

vwprintw and vw_printw are the vprintf(3) girlies โ€” they do a wprintw using a variable argument list. the third argument is a va_list, a pointer to a list of arguments, as defined in stdarg.h. periodt.


๐Ÿ’€ RETURN VALUE ๐Ÿ’€

these functions return ERR upon failure and OK upon success. iconic behavior honestly.

in ncurses, failure happens if the library cannot allocate enough memory for the buffer into which the output is formatted, <em>or</em> if the window pointer win is null. (null window? bestie. no. ๐Ÿ™ˆ)

functions prefixed with "mv" first perform cursor movement and fail if the position (y, x) is outside the window boundaries. so watch your coordinates, okay?


๐Ÿงš NOTES ๐Ÿงš

no wide character counterpart functions are defined by the "wide" ncurses configuration, nor by any standard. nope, none, don't ask ๐Ÿ˜ญ

to format and write a wide-character string to a curses window, consider using swprintf(3) and waddwstr(3X) or similar. that's the move ๐Ÿ’…


๐ŸŒˆ PORTABILITY ๐ŸŒˆ

X/Open Curses Issue 4 describes these functions. it specifies <em>no</em> error conditions for them. (bold of them honestly)

ncurses defines vw_printw and vwprintw identically to support legacy applications. however, the latter is obsolete. like, deprecated-obsolete. the kind of obsolete where you smile politely and use the other one.

  • X/Open Curses Issue 4 Version 2 (1996), marked vwprintw as requiring varargs.h and "TO BE WITHDRAWN", and specified vw_printw using the stdarg.h interface.
  • X/Open Curses Issue 5, Draft 2 (December 2007) marked vwprintw (along with vwscanw and the termcap interface) as withdrawn. after incorporating review comments, this became X/Open Curses Issue 7 (2009).
  • ncurses provides vwprintw, but marks it as deprecated. ๐Ÿซ 

๐Ÿ‘‘ HISTORY ๐Ÿ‘‘

gather round, we're doing lore now ๐Ÿ“

4BSD (1980) introduced wprintw and its variants. it implemented all as <em>functions</em>, not macros; this initial distribution of curses preceded the ANSI C standard of 1989, prior to which a variadic macro facility was not widely available in the language. (printw went unused in Berkeley distributions until 4.1cBSD (1983), which employed it in games. gaming. always gaming. ๐ŸŽฎ)

4BSD's wprintw did not use varargs.h, which had been available since Seventh Edition Unix (1979). in 1991 (a couple of years after SVr4 was generally available, and after the C standard was published), other developers updated the library, using stdarg.h internally in 4.4BSD curses. even with this improvement, BSD curses did not use function prototypes (nor even declare functions) in curses.h until 1992. the way that took a whole decade ๐Ÿ’€

4BSD documented printw and wprintw tersely as "printf on stdscr" and "printf on win", respectively. shortest docs ever, honestly kinda slay.

SVr3 summarized the functions in three lines, asserting that they were analogous to printf(3) and explaining that the string that printf(3) would write to the standard output stream would instead be output using waddstr to the given window.

SVr3 added vwprintw, describing its third parameter as a va_list, defined in varargs.h, and referred the reader to the manual pages for varargs and vprintf for detailed descriptions.

SVr4 (1989) introduced no new variations of printw, but provided for using either varargs.h or stdarg.h to define the va_list type.

X/Open Curses Issue 4 (1995), defined vw_printw to replace vwprintw, stating that its va_list type is defined in stdarg.h.


๐Ÿซถ SEE ALSO ๐Ÿซถ

curses(3X), curs_addstr(3X), curs_scanw(3X), printf(3), vprintf(3)


and that's the whole page bestie, no notes, you ate ๐Ÿ’…โœจ

this was ncurses 6.6, dated 2025-08-16 โ€” the curs_printw(3X) page, signing off. go format something pretty ๐ŸŒธ๐Ÿฆ‹

๐Ÿ“ฆ where this page comes from