如何使用 FLTK 将 const char* 转换为 CLR/C++ 中的字符串以获得 FL_Input 或其他小部件的值?
Posted
技术标签:
【中文标题】如何使用 FLTK 将 const char* 转换为 CLR/C++ 中的字符串以获得 FL_Input 或其他小部件的值?【英文标题】:How can I convert a const char* to a string in CLR/C++ with FLTK to obtain the value of an FL_Input or other widget? 【发布时间】:2020-05-19 15:01:12 【问题描述】:我最近一直在构建一个程序。最终目标是获取用户在 Fl_Input 框中写入的内容并将其写入我的数据库。为此,我需要在一个按钮上进行回调,它至少允许我获取 Fl_Input->value()
的字符串值预期的结果是 Fl_Input 的内容将在控制台窗口中输出(但最终它们将被写入数据库)。我得到的实际结果是一个错误代码,说明程序正在尝试写入安全/损坏的内存,它不太清楚,所以我将粘贴在下面
Start.exe 中出现“System.AccessViolationException”类型的未处理异常 尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
最终我希望将这些 Fl_Inputs 中的多个作为字符串并将它们存储在某种向量中,我也会保留这部分代码,但它已被注释。
struct Info
// The widgets
Fl_Input* instr;
Fl_Int_Input* inint;
// Saved values
char sval[40];
int ival;
;
// Callback for the done button
void done_cb(Fl_Widget* w, void* param)
Info* input = reinterpret_cast<Info*>(param);
// Get the values from the widgets
//const char* l = input->instr->value();
//auto my_cstr = l;
//std::string s(my_cstr);
strcpy_s(input->sval, input->instr->value());
input->ival = atoi(input->inint->value());
// Print the values
printf("String value is %s\n", input->sval);
printf("Integer value is %d\n", input->ival);
void signupScreen (void)
//Fl_Input *fname, *lname, *username, *password, *dob;
//Fl_Window *w = new Fl_Window(800, 800, "signup");
//fname = new Fl_Input(200, 100, 500, 30, "Enter first name:");
//lname = new Fl_Input(200, 150, 500, 30, "Enter last name:");
//username = new Fl_Input(200, 200, 500, 30, "Enter username wanted:");
//password = new Fl_Input(200, 250, 500, 30, "Enter password wanted:");
//dob = new Fl_Input(200, 300, 500, 30, "Enter date of birth in format dd/mm/yyyy:");
//std::vector<std::string> v; //= string(fname->value()), string(lname->value()), string(username->value()), string(password->value()), string(dob->value()) ;
Info input;
// Create the window
Fl_Window *window = new Fl_Window(200, 150);
int x = 50, y = 10, w = 100, h = 30;
input.instr = new Fl_Input(x, y, w, h, "Str");
input.instr->tooltip("String input");
y += 35;
input.inint = new Fl_Int_Input(x, y, w, h, "Int");
input.inint->tooltip("Integer input");
y += 35;
Fl_Button* done = new Fl_Button(x, y, 100, h, "Done");
done->callback(done_cb, &input);
window->end();
window->show();
编辑:删除代码行
【问题讨论】:
您发布的代码中没有任何 C++/CLR 字符串。要根据您的标题进行转换,请查看support.microsoft.com/en-gb/help/311259/…。 好的,我将编辑标签和它的标题,因为这是一个使用 CLR 与数据库交互的注册表单。编辑:发布的链接用于将字符串转换为 char*。我想要反过来。因为我已经解决了这部分问题,如果你想帮助我推荐你***.com/questions/28441540/…如果你对我如何解决这个问题有任何疑问,请随时给我发消息@cup - NP00 【参考方案1】:我怀疑您的 Info
对象在回调之前超出范围(因为它是在堆栈上分配的)。尝试将其设为静态/全局。
【讨论】:
以上是关于如何使用 FLTK 将 const char* 转换为 CLR/C++ 中的字符串以获得 FL_Input 或其他小部件的值?的主要内容,如果未能解决你的问题,请参考以下文章