Предотвращение отдельных ошибок с помощью функций безопасной строки 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
будет достаточно.