次の方法で共有


警告 C6064

変換指定子 'number' に対応する 'function-name' の整数引数がありません

この警告は、コードが書式指定文字列と一致する十分な引数を提供せず、不足している引数の 1 つが整数であることを示します。

解説

この欠陥により、出力が正しくなく、より危険な場合にスタック オーバーフローが発生する可能性があります。

コード分析名: MISSING_INTEGER_ARGUMENT_TO_FORMAT_FUNCTION

次のコードは、呼び出し sprintf_s で正しくない数の引数を使用し、不足している引数が整数であるため、この警告を生成します。 安全でないバリアントsprintf_sの代わりに安全でない関数sprintfが使用された場合、このコードは予期しない出力ではなくスタック オーバーフローを引き起こす可能性があります。

void f()
{
    char buff[8];
    const char *string="Hello";
    sprintf_s(buff, sizeof(buff), "%s %d", string);  // Attempts to print "Hello "
    // followed by a number up to eleven characters long, depending on the garbage
    // found on the stack. Any number other than a single non-negative digit can't
    // fit in the 8 char buffer and leave room for the trailing null. If sprintf 
    // had been used instead, it would overflow.
}

この警告を修正するには、不足している引数を指定するか、書式指定文字列を調整します。 この例では、不足している整数値を追加します。

void f()
{
    char buff[8];
    const char *string = "Hello";
    sprintf_s(buff, sizeof(buff), "%s %d", string, strlen(string));
}

関連項目

sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l
C4473