共用方式為


C6067

警告 C6067: 參數 <number> (於 <function> 呼叫中) 必須為字串的位址

這項警告表示格式規範和函式參數不符。 即使警告建議使用字串的位址,您都必須在修正問題之前,檢查函式所需要的參數型別。 例如,printf 的 %s 規格需要字串引數,但 scanf 中的 %s 規格則需要字串的位址。

這項缺失極可能造成某些形式的損毀。

範例

下列程式碼會產生這項警告,因為所傳遞的是整數而非字串:

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

若要更正這項警告,請將字串當做參數傳遞至 printf,如下列程式碼所示:

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

下列程式碼會產生這項警告,因為在將參數、緩衝區傳遞至 scanf 時,指定了不正確的間接取值 (Indirection) 層級:

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

若要修正上述警告,請依下列程式碼所示傳遞正確的參數:

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

下列程式碼會使用安全字串管理函式來修正這項警告:

#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