关于C#:为什么setupterm会终止程序?

Why setupterm terminates the program?

这是"Beginning Linux Programming"一书中的示例程序:

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <term.h>
#include <curses.h>
#include <stdlib.h>

int main()
{
    setupterm("unlisted", fileno(stdout), (int *)0);
    printf("Done.
"
);
    exit(0);
}

运行它,我有这个结果:

1
2
./badterm
'unlisted': unknown terminal type.

根据setupterm函数定义,它必须返回0:"terminfo数据库中没有匹配的条目"。 而不是这个,程序终止。 为什么?


看起来你要求它这样做。 从我机器上的man setupterm

1
2
3
4
5
6
  If errret is null, setupterm prints an error message  upon  finding  an
  error and exits.  Thus, the simplest call is:

        setupterm((char *)0, 1, (int *)0);

  which uses all the defaults and sends the output to stdout.

据推测,如果您想自己处理任何错误返回,则必须为errret(第三个)参数提供非NULL指针值。