使用pdcurses显示重音字符

时间:2016-11-20 18:11:41

标签: c windows pdcurses

#include <curses.h>

int main(){

    initscr();

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

    getch();
    endwin();

}

enter image description here

Pdcurses正在显示字符-128到0(128到255)的空格。有没有办法让é等重音字符正确显示? iostream没有问题:

int main(){

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

}

enter image description here

我编译了具有广泛字符和UTF支持的pdcurses,尽管这肯定不是问题,对吧? (因为我想要的字符包含在0-255之内,而使用add_wch反而无法解决问题)。

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

1 个答案:

答案 0 :(得分:0)

我很傻。 addch的值为chtype。文档对chtype的实际类型不太清楚,除了它代表字符。查看curses.h我可以看到chtype的类型为unsigned long。因此,负i值被转换为unsigned并因此环绕,导致curses必须打印未指定ASCII表示的字符。我也迷路了,因为这个看似相似的代码没有使用负值产生相同的结果:

int main(){

    initscr();

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

    getch();
    endwin();

}

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