diff --git a/src/ASCommon/AzthLanguage.cpp b/src/ASCommon/AzthLanguage.cpp index f72d693..837a993 100644 --- a/src/ASCommon/AzthLanguage.cpp +++ b/src/ASCommon/AzthLanguage.cpp @@ -63,16 +63,21 @@ const char * AzthLang::get(uint32 strId, Player const* pl) const return "Unknown Azth string"; } -const char * AzthLang::getf(uint32 strId, Player const* pl, ...) const +const char* AzthLang::getf(uint32 strId, Player const* pl, ...) const { - const char *format = get(strId, pl); + const char* format = get(strId, pl); va_list ap; - char str [2048]; va_start(ap, pl); - vsnprintf(str, 2048, format, ap); - va_end(ap); - const char *ret=&str[0]; + va_list ap_copy; + va_copy(ap_copy, ap); + int len = vsnprintf(nullptr, 0, format, ap_copy); + va_end(ap_copy); + + std::string result; + result.resize(len + 1); + vsnprintf(&result[0], len + 1, format, ap); + va_end(ap); - return ret; + return result.c_str(); }