Предупреждение C6066
Без указателя, передаваемый как параметр(число), если указатель требуется при вызове функции.
Замечания
Это предупреждение указывает, что строка формата указывает, что требуется указатель, но передается ненулевое значение. Указатель требуется, например, при использовании %n
или %p
спецификации для printf
или %d
для scanf
. Этот дефект, скорее всего, приведет к сбою или повреждению какой-либо формы.
Имя анализа кода: NON_POINTER_ARGUMENT_TO_FORMAT_FUNCTION
Пример
Следующий код создает это предупреждение:
#include <stdio.h>
#define MAX 30
void f( )
{
char buff[MAX];
sprintf( buff, "%s %p %d", "Hello, World!", 1, MAX ); //warning C6066
// code ...
}
void g( int i )
{
int result = scanf( "%d", i ); // warning C6066
// code ...
}
Чтобы исправить это предупреждение, следующий код передает правильные параметры в sprintf
функции и scanf
функции:
#include <stdio.h>
#define MAX 30
void f( )
{
char buff[MAX];
sprintf( buff, "%s %p %d", "Hello, World!", buff, MAX ); // pass buff
// code ...
}
void g( int i )
{
int result = scanf( "%d", &i ); // pass the address of i
// code ...
}
В следующем коде используются функции sprintf_s
безопасной обработки строк и scanf_s
исправление этого предупреждения:
void f( )
{
char buff[MAX];
sprintf_s( buff, sizeof(buff), "%s %p %d", "Hello, World!", buff, MAX );
// code ...
}
void g( int i )
{
int result = scanf_s( "%d", &i );
// code ...
}
Это предупреждение обычно сообщается, так как целое число используется для %p
формата вместо указателя. Использование целого числа в этом экземпляре не переносится на 64-разрядные компьютеры.
См. также
Синтаксис спецификации форматирования: функции printf и wprintf
sprintf_s
, _sprintf_s_l
, swprintf_s
, _swprintf_s_l
scanf_s
, _scanf_s_l
, wscanf_s
, _wscanf_s_l
C4313
C4477
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по