Compartir a través de


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

printf, _printf_l, wprintf, _wprintf_l

scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l