0
#include <curses.h>

int main(){

    initscr();

    for(int i = -128; i < 128; ++i)
        addch(i);

    getch();
    endwin();

}

在此处输入图像描述

Pdcurses 显示字符 -128 到 0(128 到 255)的空白。有什么办法至少可以正确显示 é 等重音字符?iostream没有问题:

int main(){

    for(int i = -128; i < 128; ++i)
    std::cout << char(i);

}

在此处输入图像描述

我编译了具有宽字符和 UTF 支持的 pdcurses,尽管这肯定不是这里的问题,对吧?(由于我想要的字符包含在 0-255 之间,并且使用add_wch而不是无论如何都不能解决问题)。

带有 g++ 6.1.0 的 Windows 10 64 位。

4

1 回答 1

0

我很傻。addch接受一个类型的值chtypechtype除了代表字符之外,文档对其他的实际类型并不太清楚。看着curses.h我可以看到 chtype 是 type unsigned long。因此,负值i被强制转换unsigned并因此环绕,导致诅咒必须打印没有为其分配 ASCII 表示的字符。我也迷路了,因为这个看似相似的代码没有使用负值产生相同的结果:

int main(){

    initscr();

    for(int i = 0; i < 255; ++i)
        addch(char(i));

    getch();
    endwin();

}

直到我记得 char 默认情况下可能会被签名,所以在被调用char(i)之前当然会环绕变成负数。addch

于 2016-11-23T19:30:02.527 回答