gpt4 book ai didi

c - 如何替换 ncurses & C 中的字符串菜单项

转载 作者:行者123 更新时间:2023-12-02 00:22:30 25 4
gpt4 key购买 nike

我想弄清楚如何更换 item_name从 ncurses 菜单。来自 man pages , 我找不到任何 set_item_name或类似的东西。如果有解决方法,有什么想法吗?

例如,替换 "Choice 1""String 1"KEY_ENTER

#include <curses.h> 
#include <menu.h>

char *choices[] = {
"Choice 1", "Choice 2", "Choice 3", "Choice 4", "Exit",
};

int main() {
ITEM **my_items, *cur_item;
int c, i;
MENU *my_menu;

initscr();
cbreak();
noecho();
keypad(stdscr, TRUE);

my_items = (ITEM **) calloc(6, sizeof(ITEM * ));
for (i = 0; i < 5; ++i)
my_items[i] = new_item(choices[i], choices[i]);
my_items[5] = (ITEM*) NULL;

my_menu = new_menu((ITEM **) my_items);
post_menu(my_menu);
refresh();

while ((c = getch()) != KEY_F(1)) {
switch (c) {
case KEY_ENTER:
// e.g. replace "Choice 1" w/ "String 1"
break;
case KEY_DOWN:
menu_driver(my_menu, REQ_DOWN_ITEM);
break;
case KEY_UP:
menu_driver(my_menu, REQ_UP_ITEM);
break;
}
}
free_item(my_items[0]);
free_item(my_items[1]);
free_menu(my_menu);
endwin();
}

最佳答案

是的,有一个解决方法可以解决丢失的 set_item_name()你可以写set_item_name();
首先查看include file menu.h ,您可以在其中找到 ITEM 的结构定义结构体。
看看那里你会发现你可以编写一个函数,如:

void set_item_name (ITEM *itm, const char* name)
{ int len = strlen(name);
char* n;
if (itm->name.str!=NULL) free((void*)(itm->name).str);
n=strdup(name);
itm->name.length=len;
itm->name.str=n;
}

关于论据:
  • itm 是指向要更改的菜单项的指针
  • name 是您要用作菜单名称的字符串。

  • 我使用这个例程在下拉菜单中创建了一个“复选框”项目,它似乎有效(在 linux debian 6.0libncurses5 (5.7) 上测试)。

    关于c - 如何替换 ncurses & C 中的字符串菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10252340/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com