Всем привет!
Имеется следующий код. Изначально это был MFC проект, использующий класс COleDateTime, но к делу это отношения не имеет, поведение от этого не меняется.
Итак, имеется дата. Задача — получить строковое представление этой даты согласно строке формата. Для преобразования используется функция _wcsftime_l() потому, что именно эту функцию использует MFC-шный класс COleDateTime.
Строка формата содержит ошибку — в конце имеется лишний знак процента.
В Visual Studio 6.0 результатом является неправильная строка с результатом, содержащая мусор. Никаких исключений не генерируется. (ОК, так и было в унаследованном проекте).
В Visual Studio 2008 Professional, в процессе разботы фунцкии _wcsftime_l(), возникает исключение, которое я отловить не могу, не смотря на наличие блоков try-catch. Программа просто аварийно завершается.
В Visual Studio 2010 Professional то же самое. В настройках проекта исключения включены. Пробовал и с SEH (/EHa) и без (/EHsc). В чем может быть дело?
Для теста было создано консольное приложение с поддержкой Unicode. VS2008, VS2010, VS6.0 (с заменой вызова _wcsftime_l() на wcsftime()).
Код полностью:
#include "stdafx.h"
#include <iostream>
#include <time.h>
int _tmain(int argc, _TCHAR* argv[])
{
const wchar_t format[] = L"%d-%m-Y%"; //Ошибочно стоит знак %
//в конце строки формата
wchar_t result[255] = L"";
time_t rawtime;
time ( &rawtime );
tm* now = localtime ( &rawtime );
try
{
_wcsftime_l(result, 255, format, now, NULL);
}
catch (...)
{
wcscpy(result, L"Error in format string");
}
std::wcout << result << std::endl;
system("pause");
return 0;
}
Спасибо!