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