как убрать предупреждение C4996 с gmtime и asctime

0

У меня есть предупреждение уровня 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(&ltime);
tm* gmt = gmtime(&ltime);

char* asctime_remove_nl = asctime(gmt);
  • 0
    Почему бы вам не сделать так, как рекомендуется, и использовать gmtime_s и asctime_s ?
  • 0
    @DaanTimmer Я не знаю, как его использовать?
Показать ещё 2 комментария
Теги:

1 ответ

1
Лучший ответ

Ниже функции возвращают указатели на статические объекты, которые могут быть перезаписаны другими последующими вызовами (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(&ltime);
 struct tm* gt = ::gmtime(&ltime);
 char* tmp = ::asctime(gt);
 std::string output(tmp);
 return output;
}

int main() {
    std::string out = get_gmtime_asctime();
    std::cout<<out<<std::endl;

}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню