BacCM
@BacCM
C++ почти с рождения

Как проверить форматную строку strftime?

В MSVC++ 2008/2010
Вызов strftime с неправильной строкой формата приводит к падению программы.

Срабатывают два ассерта после которых функция должна была бы по сценарию вернуть 0.
И мы попадаем в
__declspec(noinline)
void __cdecl _CRT_DEBUGGER_HOOK(int _Reserved)
{
    /* assign 0 to _debugger_hook_dummy so that the function is not folded in retail */
    (_Reserved);
    _debugger_hook_dummy = 0;
}


Вот минимальный код программы где это проявляется

#include <iostream>
#include <time.h>

int main()
{
	time_t tt = time(0);
	tm* t = localtime(&tt);
	char s[256] = {0};
	size_t sz = 0;
	try {
		sz = strftime(s, 255, "%H%M%", t);
		std::cout << s <<std::endl;
	}
	catch (...)	{
		std::cout << "exception" <<std::endl;
	}
	std::cin.get();
	return 0;
}
  • Вопрос задан
  • 125 просмотров
Пригласить эксперта
Ответы на вопрос 1
AxianLTD
@AxianLTD
На stackoverflow был похожий вопрос
stackoverflow.com/questions/2326532/safely-calling...
Вроде работает
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы