次の方法で共有


警告 C6054

文字列 'variable' は 0 で終わる場合があります。

解説

この警告は、0 で終わる文字列を必要とする関数に、0 で終わらない文字列が渡されたことを示します。 0 で終わる文字列を想定している関数は、バッファーの末尾を越えて 0 を検索する可能性があります。 この欠陥により、悪用される可能性があるバッファー オーバーランまたはクラッシュが発生する可能性があります。 プログラムは、渡された文字列の末尾が 0 であることを確認する必要があります。

コード分析名: MISSING_ZERO_TERMINATION2

この警告が発生するコード例を次に示します。

// Warning C6054_bad.cpp
// Compile using: cl /W4 /EHsc /c /analyze C6054_bad.cpp
#include <sal.h>

void func( _In_z_ wchar_t* wszStr );

void g ( )
{
    wchar_t wcArray[200] = { 'h', 'e', 'l', 'l', 'o' };
    func(wcArray); // Warning C6054
}

この警告を解決するには、次のサンプル コードに示すように、関数 func() を呼び出す前に wcArray を null で終了します。

// C6054_good.cpp
// Compile using: cl /W4 /EHsc /c /analyze C6054_good.cpp
#include <sal.h>

void func( _In_z_ wchar_t* wszStr );

void g ( )
{
    wchar_t wcArray[200] = { 'h', 'e', 'l', 'l', 'o', '\0' };
    func(wcArray); // OK
}

関連項目