我想编写一个format + args样式函数来创建一个字符串,并在框架中调用一个函数来访问其脚本监听器窗口以进行输出。
功能如下:
void ScriptPrint(wchar_t* format, ...) {
wchar_t formatted[1024] = {L"\0"};
va_list args;
va_start(args, format);
wsprintf(formatted, format, args);
va_end(args);
std::wstring ret = L"print \"";
ret += formatted;
ret += L"\"";
ExecuteMAXScriptScript(ret.c_str());
}
根据我的理解,它应该有效,但是当我调用这样的函数时:
ScriptPrint(L"this is an integer %i", 10);
我在监听器窗口中得到的输出是"这是一个整数1223523" (数字改变但永远不对。)
我在调试器中检查了它,这正是wsprintf输出的内容。我不确定我是否使用wsprintf错误或va_list ..帮助?
使用的标题:Windows.h,cstdarg
最终函数也只需要wchar_t *作为输入
答案 0 :(得分:1)
您需要将wvsprintf
与va_list
一起使用,而不是wsprintf
:
va_list args;
va_start(args, format);
wvsprintf(formatted, format, args);
va_end(args);
使用C ++ 11,您可以改为使用wsprintf
):
template <typename...Ts>
void ScriptPrint(const wchar_t* format, Ts&&...args) {
wchar_t formatted[1024] = {0};
wsprintf(formatted, format, std::forward<Ts>(args)...);
std::wstring ret = L"print \"";
ret += formatted;
ret += L"\"";
ExecuteMAXScriptScript(ret.c_str());
}