如何使用 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 或其他小部件的值?的主要内容,如果未能解决你的问题,请参考以下文章

c++ uint32 如何转 const char

在Qt中如何将QString转换为const char*

const char*转char*怎么转?

C++CString转换为const char *类型

C++标准库 如何连接两个const char *类型字符串,并返回const char * 类型结果?

请问C语言如何把2个const char * const s1的字符串合并?