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