Linux C Ncurses问题

问题描述 投票:0回答:1

我在C中使用Ncurses遇到了一个奇怪的问题,我似乎无法在任何地方或在网络上找到文档。也许我没有使用正确的搜索词?

这里是问题:

我有几个窗口和面板以及很多代码。直到发生这种情况,一切都可以正常运行:

mvwprintw(windowptr[i], y, x, NULL); <-- That NULL value is what sets off the bomb

我希望NULL字符串会简单地打印一个长度为0的字符串,但这不会发生。实际发生的是它损坏了我所有的窗户/面板。似乎以某种方式删除了所有先前编写的字符,并禁用了除当前窗口/面板之外的所有窗口/面板上新字符的显示。当前的窗口/面板不会空白,但是不能向其打印新字符。

这是错误吗? ...或者可能是未记录的功能?

这是我的Ncurses版本:

$ 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
c linux null ncurses
1个回答
0
投票

实际上(在此问题中没有要测试的样本MCVE),ncurses会检查此空指针,并且期望忽略在printw部分之后调用的wmove

要查看此信息,请遵循源代码:

  • mvprintw始终是函数调用(由于变长参数列表)
  • mvprintw是下一步,调用
  • vw_printw,其中vw_printw格式的空指针,并返回空,
  • 进行_nc_printf_string _nc_printf_string通话。
© www.soinside.com 2019 - 2024. All rights reserved.