【问题标题】:Pass a wxString into a printf-style varargs function将 wxString 传递给 printf 样式的可变参数函数
【发布时间】:2014-01-27 00:48:11
【问题描述】:

我正在学习使用 K&R II 编写 C 语言。我厌倦了控制台应用程序,并决定进入 GUI 环境。决定使用代码块和 wxWidgets。一切都已正确安装并正常工作。 [Windows 7 x86,代码块 13.12,wxWidgets 3.0.0]

我正在关注Tutorials on WxWidgets。我在教程 9 中。我终于让它工作了;说明有错误。

我修改了我的应用程序,使其具有 2 个文本框和一个按钮,而不是一个用于输出的文本框和一个用于输入的组合框。

Visual C++ 环境对我来说完全陌生。

对于按钮单击,我想代替打印,"O brave new world!\n", 我想阅读在textbox1 中输入的内容并将其打印到textbox2

指令:

wxString Text = TextCtrl1->GetValue();

获取已在textbox1中输入的字符串

我有一个函数调用

void printg(char *fmt, ...);

我需要知道如何/如何更改 ... 参数,以便它将 wxString Text 以数组的形式传递给 printg 函数。我确信我需要做的第一件事是将文本字符串更改为数组,或者以某种方式传递字符串本身。

更新 01/08/13 下午 3:35

我从 Textbox Enter 事件中截取了代码并将其粘贴到 ButtonClick 事件中,现在我可以获取 Box 1 到 Box 2 中的文本。

现在,我需要一种方法将文本从文本框 1 传递到我的一个 C 文件,做任何练习,然后将其传递回单击事件以传递给 printg 函数。

注意:我对 printg 感到困惑。我认为这是 wxWidgets 的一个功能,它可以让您打印回 GUI 表单,而不是像 printf 那样的控制台。它有效。

我会把代码放在这里,但我不知道怎么做。之前尝试过并收到一条关于它的格式不正确的消息。

感谢您的回复。

【问题讨论】:

  • 我想你的意思是printf 不是printg
  • “...”是省略号运算符:stackoverflow.com/questions/3792761/…
  • 如果你想把它放在另一个文本框中,为什么要使用printf(假设你的意思是printg)?
  • 反对选民,至少说明原因。考虑到我们所处的领域,拼错一个词可能会很麻烦,你不觉得吗?

标签: c++ visual-c++ wxwidgets


【解决方案1】:

Text.ToUTF8().data() 给你const char *

另外,如果你只想要char* 而不是const char *,你可以使用const_cast<char *>(Text.ToUTF8().data())

【讨论】:

    【解决方案2】:

    最方便的做法是使用标准函数的 wx 等效项,即在这种情况下为 wxPrintf(),因为它们允许您通过 wxString(以及 std::stringstd::wstringchar*wchar_t*) 直接对象,没有做任何特别的事情。所以你可以简单地写

    wxString s = ...;
    wxPrintf("My string is %s\n", s);
    

    OTOH 使用 printf()wxPrintf() 在 GUI 应用程序中通常不是很有用,您可能需要 wxLogMessage() 或类似的东西。

    【讨论】:

    • 谢谢,我搜索了“标准函数的 wx 等效项”并找到了字符串类参考页面,我将花一些时间尝试了解更多信息。我会投赞成票,但我在这个网站上没有足够的积分。
    【解决方案3】:

    如果你有一个字符串:char *str = {"this is my string"};

    然后你可以像这样使用printf()

    printf("%s\n", str);

    注意,C 语言中没有 printg()printf() 语句的原型允许传递多个参数,只要每个参数都有一个格式说明符。例如,这显示了 3 个格式说明符和三个参数:

    printf("%s %d %f\n", str, 10, 13.5);
    

    【讨论】:

      【解决方案4】:

      “...”参数称为椭圆参数。它包含在 K&R 书籍第 7.3 节(无论如何在我的版本中)。它可以包含 0 个或多个参数,如 *fmt 参数所述。

      如果你已经准备好一个字符串,就这样调用它:

      printf("%s",str);
      

      【讨论】:

        猜你喜欢
        • 2014-02-27
        • 2010-11-06
        • 1970-01-01
        • 2014-10-20
        • 1970-01-01
        • 2010-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多