【问题标题】:wxString Printf function issues in linuxlinux中的wxString Printf函数问题
【发布时间】:2014-03-02 23:23:15
【问题描述】:

我正在尝试使用 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 中执行此操作的常用方法,而不是在所有地方都更改

【问题讨论】:

    标签: linux visual-c++ gtk wxwidgets


    【解决方案1】:

    唯一的“修复”是升级到 wxWidgets 3.0,其中wxString::Printf() 和其他类似功能是(伪)可变参数模板,因此可以正确处理对象而不仅仅是原始指针。在 wxWidgets 2.8 中,它们是可变参数函数,根据语言规则,不能与对象一起使用,不,没有办法解决这个问题。

    【讨论】:

      【解决方案2】:

      这有助于澄清你:

      以下代码:

      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++ 编译代码的另一个原因。

      【讨论】:

      • 感谢您的回复,但有什么办法可以解决这个问题,而不是在我的整个工作空间中更改 linux ,我们可以使用预处理器来做到这一点
      猜你喜欢
      • 1970-01-01
      • 2014-01-27
      • 2021-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-20
      • 1970-01-01
      相关资源
      最近更新 更多