1

私は現在、いくつかの拡張文字(wchar_t)を表示する必要があるC++プロジェクトに取り組んでいます。

主な問題は、(を使用して)Cで正常に動作しても、またはwprintfを使用してC++では動作しないことです。もちろん、ロケールを次のように設定しました: 、何も表示されません。mvwaddwstrwaddwstrsetlocale(LC_ALL, "");

誰かが以前にこの問題を抱えていましたか、それともそれについて考えていますか?

ありがとう。

コードは次のとおりです。

  struct charMap { int x; int y; wchar_t value };
  int                   i, x, y;
  wchar_t               str[2];
  struct charMap _charMap[2] = {
    {0,0,9474}
    {29, 29, 9474}
  };
  initscr();
  setlocale(LC_ALL, "");
  for (y = 0 ; y < 30 /* length */ + 2 ; y++) {
    for (x = 0 ; x < 30 /* width */ + 2; x++) {
      for (i = 0 ; i < 2 ; i++) {
        if ((x == _charMap[i].x || _charMap[i].x == -1) &&
            (y == _charMap[i].y || _charMap[i].y == -1)) {
          str[0] = _charMap[i].value;
          str[1] = L'\0';
          mvwaddwstr(stdscr, y, x, str);
          break;
        }
      }
    }
  }
  refresh();
  while(1);

_charMapは、簡単に比較できる(重いif ... else if ... else構造を回避する)ための有用な値を含む構造体テーブルです。_charMap[].valueは、wchar_tであり_charMap[].x、のようにintです_charMap[].y

4

1 に答える 1

6

あなたはするsetlocale(LC_ALL, "") 前にする必要がありinitscr()ます。

実例:

#include <ncursesw/ncurses.h>
#include <locale.h>
#include <wchar.h>

int main() {  
    setlocale(LC_ALL, "");
    initscr();
    wchar_t wstr[] = { 9474, L'\0' };
    mvaddwstr(0, 0, wstr);
    refresh();
    getch();
    endwin();
    return 0;
}
于 2013-03-06T11:12:46.057 に答える