경고 C6064

변환 지정자 'number'에 해당하는 'function-name'에 대한 정수 인수가 없습니다.

이 경고는 코드가 형식 문자열과 일치하기에 충분한 인수를 제공하지 않으며 누락된 인수 중 하나가 정수임을 나타냅니다.

설명

이 결함으로 인해 잘못된 출력이 발생할 수 있으며, 더 위험한 경우 스택 오버플로가 발생할 수 있습니다.

코드 분석 이름: MISSING_INTEGER_ARGUMENT_TO_FORMAT_FUNCTION

예시

다음 코드는 호출 sprintf_s 에서 잘못된 수의 인수를 사용하고 누락된 인수가 정수이므로 이 경고를 생성합니다. 안전하지 않은 함수 sprintf 가 더 안전한 변형 sprintf_s대신 사용된 경우 이 코드로 인해 예기치 않은 출력 대신 스택 오버플로가 발생할 수 있습니다.

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