我正在尝试使用printf函数在wxstring中打印一些数据,但它在LINUX中的运行时崩溃但在Windows中没有崩溃
这是我的代码:
wxString str1,str2;
str1 = "Elements";
str2.Printf( _U("%s"),str1);
这是在Windows中工作但不在linux中工作,如果我将其更改为低于其在linux中的工作
str2.Printf( _U("%s"),str1.c_str());
为什么它没有把str1作为参数。
注意:我在整个工作区使用的这个句子是有任何常见的方法在linux中执行此操作而不是在所有位置进行更改
答案 0 :(得分:1)
唯一的“修复”是升级到wxWidgets 3.0,其中wxString::Printf()
和其他类似函数是(伪)可变参数模板,因此可以正确使用对象而不仅仅是原始指针。在wxWidgets 2.8中,它们是可变函数,并且根据语言规则,不能与对象一起使用,不,没有办法解决这个问题。
答案 1 :(得分:0)
这有助于澄清你:
以下代码:
wxString str;
str.Printf(wxT("My string is %s"), wxString("whatever"));
不起作用。不幸的是,它似乎在Windows下工作正常,因为编译器有怪癖,但是将一个wxString对象传递给一个采用可变数量参数(如Printf()的函数)是C ++中未定义的行为。因此,它只会在大多数平台下崩溃,但甚至可能对其中一些平台“起作用”。 您必须使用c_str()来使上述代码工作,即改为编写:
wxString str;
str.Printf(wxT("My string is %s"), wxString("whatever").c_str());
请注意,当将对象传递给这样的vararg函数时,g ++会给你一个错误 - 即使你通常使用另一个编译器,用g ++编译代码的另一个原因。