Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Format string mismatch.
Remarks
This warning indicates that a format string specifies a wide character string, but is being passed a narrow character string instead. One cause of the warning is because the meaning of %s
and %S
flip when used with printf
or wprintf
. This defect can lead to crashes, in addition to potentially incorrect output.
Code analysis name: CHAR_WCHAR_ARGUMENT_TO_FORMAT_FUNCTION
Example
The following code generates this warning. buff
is a narrow character string, but wprintf_s
is the wide string variant of printf_s
and so expects %s
to be wide:
void f()
{
char buff[5] = "hi";
wprintf_s(L"%s", buff);
}
The following sample code remediates this issue by using %hs
to specify a single-byte character string. Alternatively it could have switched to %S
, which is a narrow string when used with wprintf
like functions. See Format specification syntax: printf
and wprintf
functions for more options.
void f()
{
char buff[5] = "hi";
wprintf_s(L"%hs", buff);
}
See also
Format specification syntax: printf
and wprintf
functions
C4477
C6303