C6067C6067

avertissement C6067 : paramètre <nombre > dans l’appel à <fonction > doit être l’adresse de la chaînewarning C6067: parameter <number> in call to <function> must be the address of the string

Cet avertissement indique une incompatibilité entre le spécificateur de format et le paramètre de fonction.This warning indicates a mismatch between the format specifier and the function parameter. Bien que l’avertissement indique à l’aide de l’adresse de la chaîne, vous devez vérifier le type de paramètre de qu'une fonction attend avant de corriger le problème.Even though the warning suggests using the address of the string, you must check the type of parameter a function expects before correcting the problem. Par exemple, un %s spécification pour printf requiert un argument de chaîne, mais un %s spécification dans scanf requiert une adresse de la chaîne.For example, a %s specification for printf requires a string argument, but a %s specification in scanf requires an address of the string.

Ce problème est susceptible de provoquer un blocage ou la corruption d’une forme.This defect is likely to cause a crash or corruption of some form.

ExempleExample

Le code suivant génère cet avertissement car un entier est passé à la place d’une chaîne :The following code generates this warning because an integer is passed instead of a string:

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

Pour corriger l’avertissement, passez une chaîne en tant que paramètre printf comme indiqué dans le code suivant :To correct the warning, pass a string as a parameter to printf as shown in the following code:

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

Le code suivant génère cet avertissement car un niveau d’indirection incorrect est spécifié lors du passage du paramètre, la mémoire tampon, à scanf:The following code generates this warning because an incorrect level of indirection is specified when passing the parameter, buffer, to 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 ;  
  }  
}  

Pour corriger les avertissements précités, passez le paramètre correct comme indiqué dans le code suivant :To correct above warnings, pass the correct parameter as shown in the following code:

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

Le code suivant utilise les fonctions de manipulation de chaîne sécurisée pour corriger cet avertissement :The following code uses safe string manipulation functions to correct this warning:

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

Voir aussiSee Also

sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l
printf, _printf_l, wprintf, _wprintf_l printf, _printf_l, wprintf, _wprintf_l
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_lscanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l