将wxString传递给printf样式的varargs函数

时间:2014-01-08 18:33:41

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

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

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

我修改了我的应用程序,有两个文本框和一个按钮,一个文本框用于输出,一个组合框用于输入。

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

对于按钮点击,我想要而不是打印,"O brave new world!\n", 我想阅读textbox1中输入的内容并将其打印到textbox2

指示:

wxString Text = TextCtrl1->GetValue();

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

我调用了函数

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

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

更新01/08/13 3:35 PM

我从Textbox Enter事件中剪切了代码并将其粘贴到ButtonClick事件中,现在我可以将第一个框中的文本转到第二个框。

现在,我需要一种方法将文本从文本框1传递到我的一个C文件,执行练习的任何内容并将其传递回click事件以传递给printg函数。

注意:我看到有关printg的混淆。我认为wxWidgets的一个功能是让你可以像printf那样打印回GUI表单而不是控制台。它有效。

我会把代码放在这里,但我不知道如何。之前尝试过并收到有关未正确格式化的消息。

感谢您的回复。

4 个答案:

答案 0 :(得分:3)

Text.ToUTF8().data()为您提供const char *

此外,如果您只想char*代替const char *,则可以使用const_cast<char *>(Text.ToUTF8().data())

答案 1 :(得分:1)

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

wchar_t*

使用wxString s = ...; wxPrintf("My string is %s\n", s); printf()的OTOH在GUI应用程序中通常不是很有用,您可能需要wxLogMessage()或类似的东西。

答案 2 :(得分:0)

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

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

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

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

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

答案 3 :(得分:0)

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

如果您已准备好字符串,请按以下方式调用:

printf("%s",str);