Предотвращение отдельных ошибок с помощью функций безопасной строки CRT

Начиная с Visual Studio 2005, CRT заменил большинство строковых функций на безопасные версии, в которые добавлен аргумент размера, чтобы указать ограничения целевого буфера (ов). Это хорошо, но не понятно, как его использовать. Включает ли он завершающий ноль? Возьмите следующий код для примера:

…
TCHAR path[MAX_PATH] = TEXT("");
_tcscpy_s(path, MAX_PATH, filename);
…

Это нормально или это вызывает ошибку "один за другим"?

1 ответ

Было бы ошибкой дизайна API использовать MAX_PATH+/-1, так как это могло бы сбить с толку и привести к большему количеству переполнений буфера.

В документации четко указано дляdest[10]что_countof(dest)следует использовать, что было бы10Так простоMAX_PATHбудет достаточно.

Другие вопросы по тегам