警告 C6066
'function' の呼び出しでポインターが必要な場合に、パラメーター (数値) として渡される非ポインター。
解説
この警告は、ポインターが必要であるが、ポインター以外が渡されていることを書式指定文字列が指定していることを示します。 ポインターは、たとえば、〘〗または %p
〗printf
%d
scanf
〗の指定を%n
使用する場合に必要です。 この障害は、何らかの形式のクラッシュまたは破損の原因となる可能性があります。
コード分析名: 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 の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示