Sdílet prostřednictvím


Upozornění C6303

Neshoda řetězců formátu

Poznámky

Toto upozornění značí, že formátovací řetězec určuje úzký znakový řetězec, ale místo toho se předává široký znakový řetězec. Jednou z příčin upozornění je to, že význam %s a %S překlopení při použití s printf nebo wprintf. Tato chyba může vést k chybovému ukončení, kromě potenciálně nesprávného výstupu.

Název analýzy kódu: WCHAR_CHAR_ARGUMENT_TO_FORMAT_FUNCTION

Příklad

Následující ukázkový kód vygeneruje toto upozornění. buff je řetězec širokého znaku printf_s , ale volání očekává krátký řetězec jako označený %s:

#include <stdio.h>

void f()
{
    wchar_t buff[5] = L"hi";
    printf_s("%s", buff);
}

Následující příklad kódu opraví tento problém pomocí %ls k určení širokého znakového řetězce. Alternativně mohlo dojít k přepnutí na %S, což je široký řetězec při použití s funkcemi printf jako. Další možnosti najdete v tématu Syntaxe specifikace formátu: printf a wprintf funkce .

#include <stdio.h>

void f()
{
    wchar_t buff[5] = L"hi";
    printf_s("%ls", buff);
}

Viz také

Syntaxe specifikace formátu: printf a wprintf funkce
C4477
C6302