C6067

 

The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.

The latest version of this topic can be found at C6067.

warning C6067: parameter <number> in call to <function> must be the address of the string

This warning indicates a mismatch between the format specifier and the function parameter. 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. For example, a %s specification for printf requires a string argument, but a %s specification in scanf requires an address of the string.

This defect is likely to cause a crash or corruption of some form.

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 ...  
}  

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 ...  
}  

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

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

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

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

Show: