Avertissement C6067

Le paramètre 'number' dans l’appel à 'function' doit être l’adresse de la chaîne

Notes

Cet avertissement indique une incompatibilité entre le spécificateur de format et le paramètre de fonction. Même si l’avertissement suggère d’utiliser l’adresse de la chaîne, vous devez case activée le type de paramètre attendu par une fonction avant de corriger le problème. Par exemple, une %s spécification pour printf exiger un argument de chaîne, mais une %s spécification scanf nécessite une adresse de la chaîne.

Ce défaut est susceptible d’entraîner un blocage ou une corruption d’une forme quelconque.

Nom de l’analyse du code : NON_STRING_ARGUMENT_TO_FORMAT_FUNCTION

Exemple

Le code suivant génère cet avertissement, car un entier est passé au lieu d’une chaîne :

#include <stdio.h>

void f_defective()
{
  char *str = "Hello, World!";
  printf("String:\n %s", 1);
  // code ...
}

Pour corriger l’avertissement, transmettez une chaîne en tant que paramètre comme printf indiqué dans le code suivant :

#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 incorrect d’indirection est spécifié lors du passage du paramètre, de la mémoire tampon, à 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 ci-dessus, transmettez le paramètre approprié, comme indiqué dans le code suivant :

#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 des fonctions de manipulation de chaîne sécurisée pour corriger cet avertissement :

#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 aussi

Syntaxe de spécification de format : fonctions printf et wprintf
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
C4313
C4477