diff --git a/sdk/Windows/Helpers.cpp b/sdk/Windows/Helpers.cpp
index 6141a24..a886e88 100644
--- a/sdk/Windows/Helpers.cpp
+++ b/sdk/Windows/Helpers.cpp
@@ -68,27 +68,12 @@ wstring SMX::GetErrorString(int err)
 
 string SMX::vssprintf(const char *szFormat, va_list argList)
 {
-    string sStr;
-
-    char *pBuf = NULL;
-    int iChars = 128;
-    int iUsed = 0;
-    int iTry = 0;
+    int iChars = vsnprintf(NULL, 0, szFormat, argList);
 
-    do
-    {
-        // Grow more than linearly (e.g. 512, 1536, 3072, etc)
-        iChars += iTry * 1024;
-        delete[] pBuf;
-        pBuf = new char[iChars];
-        iUsed = vsnprintf(pBuf, iChars-1, szFormat, argList);
-        ++iTry;
-    } while(iUsed < 0);
-
-    // assign whatever we managed to format
-    sStr.assign(pBuf, iUsed);
-
-    delete[] pBuf;
+    string sStr;
+    sStr.resize(iChars+1);
+    vsnprintf((char *) sStr.data(), iChars+1, szFormat, argList);
+    sStr.resize(iChars);
 
     return sStr;
 }