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~^
我想我会将此作为答案发布。因此,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"