#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
反而无法解决问题)。
Windows 10 64位,带有g ++ 6.1.0。
答案 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
之前变为负数。