Предупреждение C6054

Строка "переменная" не может быть завершена с нуля.

Замечания

Это предупреждение указывает на то, что функция, требующая отсчитываемой от нуля строки, была передана ненулевая строка. Функция, предполагающая нулевое завершение строки, может искать ноль за пределами буфера. Этот дефект может привести к ошибке переполнения буфера эксплойтов или сбою. Программа должна убедиться, что строка, передаваемая в конце, заканчивается нулем.

Имя анализа кода: 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
}

Чтобы исправить это предупреждение, прервать wcArray значение NULL перед вызовом функции func() , как показано в следующем примере кода:

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

См. также