我在C中使用Ncurses遇到了一个奇怪的问题,我似乎无法在任何地方或在网络上找到文档。也许我没有使用正确的搜索词?
我有几个窗口和面板以及很多代码。直到发生这种情况,一切都可以正常运行:
mvwprintw(windowptr[i], y, x, NULL); <-- That NULL value is what sets off the bomb
我希望NULL字符串会简单地打印一个长度为0的字符串,但这不会发生。实际发生的是它损坏了我所有的窗户/面板。似乎以某种方式删除了所有先前编写的字符,并禁用了除当前窗口/面板之外的所有窗口/面板上新字符的显示。当前的窗口/面板不会空白,但是不能向其打印新字符。
这是错误吗? ...或者可能是未记录的功能?
$ dpkg -l | grep -i ncurse
ii libncurses5:amd64 6.0+20160213-1ubuntu1 amd64 shared libraries for terminal handling
ii libncurses5:i386 6.0+20160213-1ubuntu1 i386 shared libraries for terminal handling
ii libncurses5-dev:amd64 6.0+20160213-1ubuntu1 amd64 developer's libraries for ncurses
ii libncursesw5:amd64 6.0+20160213-1ubuntu1 amd64 shared libraries for terminal handling (wide character support)
ii libncursesw5:i386 6.0+20160213-1ubuntu1 i386 shared libraries for terminal handling (wide character support)
ii mtr-tiny 0.86-1ubuntu0.1 amd64 Full screen ncurses traceroute tool
ii ncurses-base 6.0+20160213-1ubuntu1 all basic terminal type definitions
ii ncurses-bin 6.0+20160213-1ubuntu1 amd64 terminal-related programs and man pages
ii ncurses-term 6.0+20160213-1ubuntu1 all additional terminal type definitions
实际上(在此问题中没有要测试的样本MCVE),ncurses会检查此空指针,并且期望忽略在printw
部分之后调用的wmove
。
要查看此信息,请遵循源代码:
mvprintw
始终是函数调用(由于变长参数列表)mvprintw
是下一步,调用vw_printw
,其中vw_printw
格式的空指针,并返回空,_nc_printf_string
_nc_printf_string
通话。