diff --git a/dlls/user/wsprintf.c b/dlls/user/wsprintf.c
index 1911e0cf0ee4b42fd49432f55ec12f3068d1431a..ddf2f1351ba650b3112ebd7ae34000a55a7b01e3 100644
--- a/dlls/user/wsprintf.c
+++ b/dlls/user/wsprintf.c
@@ -312,6 +312,7 @@ static INT16 wvsnprintf16( LPSTR buffer, UINT16 maxlen, LPCSTR spec,
         case WPR_WCHAR:  /* No Unicode in Win16 */
         case WPR_CHAR:
             *p= cur_arg.char_view;
+            /* wsprintf16 (unlike wsprintf) ignores null characters */
             if (*p != '\0') p++;
             else if (format.width > 1) *p++ = ' ';
             else len = 0;
@@ -400,16 +401,10 @@ INT WINAPI wvsnprintfA( LPSTR buffer, UINT maxlen, LPCSTR spec, va_list args )
         switch(format.type)
         {
         case WPR_WCHAR:
-            *p = argData.wchar_view;
-            if (*p != '\0') p++;
-            else if (format.width > 1) *p++ = ' ';
-            else len = 0;
+            *p++ = argData.wchar_view;
             break;
         case WPR_CHAR:
-            *p = argData.char_view;
-            if (*p != '\0') p++;
-            else if (format.width > 1) *p++ = ' ';
-            else len = 0;
+            *p++ = argData.char_view;
             break;
         case WPR_STRING:
             memcpy( p, argData.lpcstr_view, len );
@@ -501,16 +496,10 @@ INT WINAPI wvsnprintfW( LPWSTR buffer, UINT maxlen, LPCWSTR spec, va_list args )
         switch(format.type)
         {
         case WPR_WCHAR:
-            *p = argData.wchar_view;
-            if (*p != '\0') p++;
-            else if (format.width > 1) *p++ = ' ';
-            else len = 0;
+            *p++ = argData.wchar_view;
             break;
         case WPR_CHAR:
-            *p = argData.char_view;
-            if (*p != '\0') p++;
-            else if (format.width > 1) *p++ = ' ';
-            else len = 0;
+            *p++ = argData.char_view;
             break;
         case WPR_STRING:
             {