Как работает strcpy_s?
Как мы все знаем, strcpy_s - это безопасная версия strcpy.
Но мне интересно, как это работает ...
давайте посмотрим несколько примеров.
объявление strpy_s:
errno_t strcpy_s (_CHAR * _DEST, size_t _SIZE, const _CHAR * _SRC)
EG1
char dest[5];
char* src = "abcdefg";
strcpy_s(dest,5,src);
Это вернет утверждение.
Я думаю, что я могу понять это, используйте_РАЗМЕР чтобы убедиться, что мы не можем скопировать больше символов, чем_РАЗМЕР
Но .. я не могу понять это:
char dest[5];
char* src = "abcdefg";
strcpy_s(dest,10,src);
мы все еще можем получить утверждение, как это случилось?
ps, ошибка была:
Ошибка отладки
выражение: (L "Буфер слишком мал" && 0)
В VS2013
будет strcpy_s проверять размер dest внутри своего тела ?? и если это правда, то как? Как проверить указатель, как _DEST?