C6067
advertencia C6067: El parámetro <número> de la llamada a <función> debe ser la dirección de la cadena
Esta advertencia indica que el especificador de formato y el parámetro de función no se corresponden.Aunque la advertencia sugiere que se utilice la dirección de la cadena, debe comprobar el tipo de parámetro que la función espera antes de corregir el problema.Por ejemplo, una especificación de %s para printf requiere un argumento de cadena, pero una especificación de %s en scanf requiere una dirección de la cadena.
Es probable que este defecto provoque algún tipo de bloqueo o de daño.
Ejemplo
El siguiente código genera esta advertencia porque se pasa un entero en lugar de una cadena:
#include <stdio.h>
void f_defective( )
{
char *str = "Hello, World!";
printf("String:\n %s",1); // warning
// code ...
}
Para corregir la advertencia, pase una cadena como parámetro a printf como se muestra en el código siguiente:
#include <stdio.h>
void f_corrected( )
{
char *str = "Hello, World!";
printf("String:\n %s",str);
// code ...
}
El código siguiente genera esta advertencia porque se especifica un nivel incorrecto de direccionamiento indirecto al pasar el parámetro, 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 corregir las advertencias anteriores, pase el parámetro correcto como se muestra en el código siguiente:
#include <stdio.h>
void h_corrected( )
{
int retval;
char* buffer = new char(20);
if ( buffer )
{
retval = scanf("%s", buffer);
// code...
delete buffer;
}
}
El código siguiente utiliza funciones de manipulación de cadenas de caracteres seguras para corregir esta advertencia:
#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);
}
Vea también
Referencia
sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l