C6054C6054

предупреждение C6054: строковая <переменная> не может завершаться нулемwarning C6054: string <variable> may not be zero-terminated

RemarksRemarks

Это предупреждение означает, что для функции, требующей строку, завершающуюся нулем, была передана строка, не завершающаяся нулем.This warning indicates that a function that requires a zero-terminated string was passed a non-zero terminated string. Функция, которая ожидает строку, завершающуюся нулем, может искать ноль за концом буфера.A function that expects a zero-terminated string could look for the zero beyond the end of the buffer. Эта ошибка может привести к ошибке переполнения буфера или сбою злоумышленника.This defect might cause an exploitable buffer overrun error or crash. Программа должна убедиться, что передаваемая строка заканчивается нулем.The program should make sure the string passed in ends with a zero.

ПримерExample

Это предупреждение создается в следующем коде:The following code generates this 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 функции func() следует завершать нулем, как показано в следующем образце кода:To correct this warning, null-terminate wcArray before calling function func() as shown in the following sample code:

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

См. также разделSee also