Share via


경고 C6067

'function' 호출의 매개 변수 'number'는 문자열의 주소여야 합니다.

설명

이 경고는 형식 지정자와 함수 매개 변수 간의 불일치를 나타냅니다. 경고가 문자열의 주소를 사용하는 것을 제안하더라도 문제를 해결하기 전에 함수가 예상하는 매개 변수 형식을 검사 합니다. 예를 들어 사양에 %sprintf 문자열 인수가 필요하지만 사양에 %sscanf 문자열의 주소가 필요합니다.

이 결함은 어떤 형태의 충돌 또는 손상을 일으킬 가능성이 높습니다.

코드 분석 이름: NON_STRING_ARGUMENT_TO_FORMAT_FUNCTION

예시

다음 코드는 문자열 대신 정수가 전달되므로 이 경고를 생성합니다.

#include <stdio.h>

void f_defective()
{
  char *str = "Hello, World!";
  printf("String:\n %s", 1);
  // code ...
}

경고를 수정하려면 다음 코드와 같이 문자열을 printf 매개 변수로 전달합니다.

#include <stdio.h>

void f_corrected()
{
  char *str = "Hello, World!";
  printf("String:\n %s", str);
  // code ...
}

매개 변수 버퍼 scanf를 전달할 때 잘못된 수준의 간접 참조가 지정되므로 다음 코드는 이 경고를 생성합니다.

#include <stdio.h>

void h_defective()
{
  int retval;
  char* buffer = new char(20);
  if (buffer)
  {
    retval = scanf("%s", &buffer); // warning C6067
    // code...
    delete buffer;
  }
}

위의 경고를 수정하려면 다음 코드와 같이 올바른 매개 변수를 전달합니다.

#include <stdio.h>

void h_corrected()
{
  int retval;
  char* buffer = new char(20);
  if (buffer)
  {
    retval = scanf("%s", buffer);
    // code...
    delete buffer;
  }
}

다음 코드는 안전한 문자열 조작 함수를 사용하여 이 경고를 수정합니다.

#include <stdio.h>

void f_safe()
{
  char buff[20];
  int retVal;

  sprintf_s(buff, 20, "%s %s", "Hello", "World!");
  printf_s("String:\n   %s  %s", "Hello", "World!");
  retVal = scanf_s("%s", buff, 20);
}

참고 항목

형식 사양 구문: printf 및 wprintf 함수
sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l
printf, _printf_l, wprintf, _wprintf_l
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l
C4313
C4477