Partilhar via


C6067

Aviso C6067: parâmetro <número> na chamada para <função> deve ser o endereço da cadeia de caracteres

Esse aviso indicar uma incompatibilidade entre o especificador do formato e o parâmetro da função.Mesmo que o aviso sugerir usar o endereço de cadeia de caracteres, você deve verificar o tipo de parâmetro que uma função espera antes de corrigir o problema.Por exemplo, uma especificação de %s para printf requer um argumento de cadeia de caracteres, mas uma especificação de %s em scanf requer um endereço de cadeia de caracteres.

Este defeito provavelmente causar uma falha ou um dano de alguma forma.

Exemplo

O código a seguir gerenciar esse aviso como um inteiro for transmitido em vez de uma cadeia de caracteres:

#include <stdio.h>
void f_defective( )
{  
  char *str = "Hello, World!";
  printf("String:\n %s",1); // warning
  // code ...
}

Para corrigir o aviso, passar uma cadeia de caracteres como um parâmetro para printf conforme mostrado no seguinte código:

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

O código a seguir gerenciar esse aviso porque um nível de nomes indiretos incorreto é especificado ao transmitir parâmetro, armazena no buffer, a 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 ;
  }
}

Para corrigir acima de avisos, o parâmetro correto como mostrado no seguinte código:

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

O código a seguir usa funções seguras de manipulação de cadeia de caracteres para corrigir esse aviso:

#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);
}

Consulte também

Referência

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