C6053
Предупреждение C6053: вызов <функция> может не окончить нулем строку <переменная>
Это предупреждение указывает, что указанная функция была вызвана таким образом, что строка результата может не оканчиваться нулем.Эта неполадка может привести к переполнению буфера или сбою.Это предупреждение также возникает, если функция с аннотаций ожидает строку, оканчивающуюся нулем и получает строку, не оканчивающуюся нулем.
Для большинства стандартных функций библиотеки C и функций обработки строк Win32 требуются строки, оканчивающиеся нулем; в результате работы этих функций получаются такие же строки.Несколько функций "считанных строк" (включая strncpy, wcsncpy, _mbsncpy, _snprintf и snwprintf) не производят строки, оканчивающиеся нулем, если они заполняют свой буфер.В этом случае последующий вызов строкой функции, ожидающей строку, оканчивающуюся нулем, выйдет за пределы буфера в поисках нуля.В программе следует реализовать проверку того, что строка заканчивается нулем.Это можно сделать так: передать функции "считанной строки" длину, меньшую, чем размер буфера, и явным образом присвоить нуль последнему знаку буфера.
Пример
Это предупреждение создается в следующем примере кода:
#include <string.h>
#define MAX 15
size_t f( )
{
char szDest[MAX];
char *szSource="Hello, World!";
strncpy(szDest, szSource, MAX);
return strlen(szDest); // possible crash here
}
Чтобы исправить это предупреждение, следует завершать строки нулем, как показано в следующем примере кода:
#include <string.h>
#define MAX 15
size_t f( )
{
char szDest[MAX];
char *szSource="Hello, World!";
strncpy(szDest, szSource, MAX-1);
szDest[MAX-1]=0;
return strlen(szDest);
}
В следующем примере кода это предупреждение исправлено благодаря функции безопасной обработки строк strncpy_s:
#include <string.h>
#define MAX 15
size_t f( )
{
char szDest[MAX];
char *szSource= "Hello, World!";
strncpy_s(szDest, sizeof(szDest), szSource, strlen(szSource));
return strlen(szDest);
}
Обратите внимание, что это предупреждение иногда возникает для определенных идиом, для которых гарантируется безопасность.Из-за частоты и последствий этой неполадки программа анализа настроена на поиск наибольшего числа неполадок такого типа вместо более тщательного отбора, используемого в прочих случаях.
См. также
Ссылки
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l