C++ 如何传递可变参数?

C++ 如何传递可变参数?,c++,variadic-functions,C++,Variadic Functions,我试图传递一些可变参数,但没有成功 代码: payloadMap是一个包含我需要格式化的字符串的映射 我在enviarComandoPTZ的第三条线路上发现了一个分段故障 看看。也许您的字符串大于1024个符号 这可能是因为ToStdString:std::string的实现与wxWidget的实现不同。请尝试拨打: return (wxString::FormatV(_(payloadMap[tipo]),parametros)).c_str(); 将此调用中断为这样的步骤 wxString

我试图传递一些可变参数,但没有成功

代码:

payloadMap是一个包含我需要格式化的字符串的映射

我在enviarComandoPTZ的第三条线路上发现了一个分段故障

看看。也许您的字符串大于1024个符号

这可能是因为ToStdString:std::string的实现与wxWidget的实现不同。请尝试拨打:

return (wxString::FormatV(_(payloadMap[tipo]),parametros)).c_str();
将此调用中断为这样的步骤

wxString str = payloadMap[ tipo ];
wxString fmt = _( str ); // BTW, what is this ?
wxString res = wxString::FormatV( fmt, parametros );
return res.c_str();

并使用调试器运行它

问题实际上与可变参数无关。由于对象Dispositivo为null,无法访问其中一个函数参数m_sessao

我花了一段时间才注意到这一点,因为我已经习惯了Java,如果我也尝试访问null对象的函数,而不仅仅是在尝试访问该属性之后,我希望会发生任何nullpointerexception;当我调用的函数进入Dispositivo并且它不是静态的时,我假设它不是null


感谢那些试图帮助我的人。我得到了一些修复代码的好方法。

您是否尝试过调试并查看哪些崩溃?可能是my_Function代码出了问题。您省略的代码是否尝试访问三个C字符串以外的任何内容作为可选参数?因为你没有提供一份报告,所以没有再报告。我做错了什么您没有发布完整的测试用例。如果我添加足够多的缺失代码来编译和运行代码,那么您的代码运行时不会出现分段错误:。您到底如何将它们传递给该函数?某些变量是否包含与变量参数匹配的正确格式说明符?您的实函数是否返回了一个您发布的代码没有返回的值,这可能会导致崩溃?obterPayload不需要va_列表。难怪你会有麻烦。谢谢你的回复,@borisbn。但如果我按照你的建议调用,它就无法编译。wxString::FormatV已返回const*char。我做了这些更改,但它仍然在同一次调用中崩溃。首先:wxString::FormatV已经返回const*char它不能返回char*,因为您不能从指针调用TostString。。。仅来自wxString的对象。第二:什么是??第三:看看我对答案所做的编辑,我的意思是常量字符*,对不起是wxString的初始值设定项。它从literal转换为wxString。我正在进行一些修改,并将发布结果。未成功:。它不断地在呼叫ComandoUtil::gerarComando时崩溃;我正在检查我试图传递的参数,我注意到分段错误来自m_sessao。这是Dispositivo类的受保护属性。Idk为什么会发生这种情况,因为此方法也在Dispositivo中。
wxString str = payloadMap[ tipo ];
wxString fmt = _( str ); // BTW, what is this ?
wxString res = wxString::FormatV( fmt, parametros );
return res.c_str();