为什么会产生损坏的输出? (ncurses菜单)

时间:2012-03-25 04:48:26

标签: c++ terminal ncurses

它产生乱码,但也打印正确的信息。 它似乎也没有输出所有文件。如果我用较少的文件指定一个较小的目录,则包含所有文件,但是当我执行我的整个音乐目录时,大约2000个文件它只显示一个包含3个项目的菜单。我知道它成功扫描了文件,这似乎是我的ncurses代码的一个问题。

void init_song_menu(vector<Song>& songs){
  int nsongs = (int) songs.size();
  printw("%d",nsongs);
  ITEM **items;
  items = (ITEM **)calloc(nsongs,sizeof(ITEM *));
  for(int i = 0; i < nsongs; ++i){
    //printw(choice.c_str());
    string* choice = new string;
    choices.push_back(choice);
  //*choice += songs.at(i).get_path();
   *choice += songs.at(i).get_ID3().title;
    items[i] = new_item(choice->c_str()," ");       
  }
  WINDOW *mw = newwin(30,90,4,4);
  LSTWINDOW* menu_win = (LSTWINDOW*) mw;
  menu_opts_off(menu_win->menu,O_SHOWDESC);
  menu_win->menu = new_menu((ITEM **)items);
  set_menu_win(menu_win->menu,mw);
  set_menu_sub(menu_win->menu,derwin(menu_win,26,88,3,1));
  set_menu_format(menu_win->menu,10,1);
  set_menu_mark(menu_win->menu,"*");
  wlist.push_back(menu_win);
  focused = menu_win;    
}

http://pastebin.com/jVQpLb6A

1 个答案:

答案 0 :(得分:0)

项目列表必须以NULL结尾。也就是说,您必须分配nsongs + 1,然后将最后一项设置为NULL:

items[nsongs]=NULL;