我如何打印 (??)?与 Ncurses?

Vol*_*ort 4 c++ curses terminal ubuntu ncurses

我想打印(????)?在 Ubuntu 中使用 C++ 的 Ncurses 库。

首先,你可以通过简单地做到这一点:

std::cout << "(????)?" << std::endl;
Run Code Online (Sandbox Code Playgroud)

它工作得很好。

但是,在使用 Ncurses 打印时,我认为您需要使用printw(char[]). 在这种情况下,我尝试这样的事情:

std::string str = "(????)?";   // String
initscr();                     // Start curses mode
printw(str.c_str());           // Print
getch();                       // Wait for input
endwin();                      // Exit curses mode
Run Code Online (Sandbox Code Playgroud)

但它输出:

(?~X~^??~ ?~C???~ )?~X~^

我原以为这可能是它c_str()的错,但是当我用std::cout它来做时,它也能正常工作。

如何使用 Ncurses 打印该文本?为什么它std::cout与 Ncurses' 一起工作而不是与 Ncurses' 一起工作printw(char[])

我编译使用

g++ Main.cpp -lncurses
Run Code Online (Sandbox Code Playgroud)

在 64 位机器上。Ubuntu(也是 64 位)在 VirtualBox 中运行,OSX 作为主机。


更新

我已被重定向到/sf/answers/694897941/。那里的解决方案似乎并没有解决我的问题 - 相反,这是现在的样子:

(Mb~X~^M-oM->~ Mc~CM-.M-oM->~ )Mb~X~^

Pet*_*erT 6

我想我会将此作为答案发布。因此,Ubuntu 显然默认不附带 Unicode 支持版本。所以你首先需要安装它

sudo apt-get install libncursesw5-dev
Run Code Online (Sandbox Code Playgroud)

然后你可以编译这个

#include <iostream>
#include <string>
#include "locale.h"
#include "ncursesw/ncurses.h"
using namespace std;

int main()
{
    setlocale(LC_ALL, "");
    std::string str = "(????)?";   // String
    initscr();                     // Start curses mode
    printw(str.c_str());           // Print
    getch();                       // Wait for input
    endwin();  
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它会顺利运行。

介意 #include "ncursesw/ncurses.h"

  • 效果很好。在启动 ncurses 模式之前不要忘记 `setlocale(LC_ALL, "");` 事情。 (3认同)