Предупреждение C6303

Несоответствие строк форматирования.

Замечания

Это предупреждение указывает, что строка формата задает узкое символьное значение, но вместо этого передается широкая строка символов. Одна из причин предупреждения заключается в том, что значение %s и %S перевернутые при использовании с printf или wprintf. Этот дефект может привести к сбоям в дополнение к потенциально неправильным выходным данным.

Имя анализа кода: WCHAR_CHAR_ARGUMENT_TO_FORMAT_FUNCTION

Пример

Следующий пример кода создает это предупреждение. buffпредставляет собой широкую символьную строку, но printf_s вызов ожидает короткую строку, обозначаемую :%s

#include <stdio.h>

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

В следующем примере кода эта проблема устранена с помощью %ls указания широкой символьной строки. Кроме того, он мог бы переключиться %Sна , которая является широкой строкой при использовании с printf такими функциями. Дополнительные параметры см. в синтаксисе спецификации формата: printf и wprintf функции .

#include <stdio.h>

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

См. также

Синтаксис спецификации форматирования: printf и wprintf функции
C4477
C6302