У меня есть предупреждение уровня 4 в моем проекте C++, который я хочу решить, предупреждение
Предупреждение 1 предупреждение C4996: "gmtime": эта функция или переменная может быть небезопасной. Вместо этого используйте gmtime_s. Чтобы отключить устаревание, используйте _CRT_SECURE_NO_WARNINGS. Смотрите справку для деталей.
Предупреждение 2 Предупреждение C4996: "asctime": эта функция или переменная может быть небезопасной. Вместо этого рассмотрите возможность использования asctime_s. Чтобы отключить устаревание, используйте _CRT_SECURE_NO_WARNINGS. Смотрите справку для деталей.
код C++
time_t ltime;
time(<ime);
tm* gmt = gmtime(<ime);
char* asctime_remove_nl = asctime(gmt);
Ниже функции возвращают указатели на статические объекты, которые могут быть перезаписаны другими последующими вызовами (K & R Book). Следовательно, они не считаются безопасными и из-за этого компилятора VS выдают предупреждение/ошибку. Его можно удалить, добавив MACRO в проект (файл.proj) (CRT_SECURE_NO_WARNINGS).
gmtime()
asctime()
Однако мы можем написать небольшие служебные функции, которые сделают копию этих статических строк.
// This would return the copy of time/date in std::string object to caller
std::string get_gmtime_asctime() {
time_t ltime;
time(<ime);
struct tm* gt = ::gmtime(<ime);
char* tmp = ::asctime(gt);
std::string output(tmp);
return output;
}
int main() {
std::string out = get_gmtime_asctime();
std::cout<<out<<std::endl;
}
gmtime_s
иasctime_s
?