#c #string #exception #visual-c #unhandled-exception
#c #строка #исключение #visual-c #необработанное исключение
Вопрос:
#define MAX 260
#include <iostream>
#include <string.h>
std::wstring getDirectory()
{
wchar_t Ext[MAX] = L"body.html";
wchar_t Buffer[MAX] = L"";
try
{
auto val = L"C:\ProgramData\Production\00000000000000000000000000000000000000000000000000000000000000000000000000\111111111111\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.";
wcscpy_s(Buffer, val);
wcscat_s(Buffer, Ext);
return std::wstring(Buffer);
}
catch(...)
{
std::cout << "exception raised." << std::endl;
throw std::exception("Failed to create Directory");
}
}
В этом примере вызов wcscat_s(Buffer, Ext);
генерирует необработанное исключение из-за недопустимого параметра ‘Buffer’, размер которого превышает допустимый максимальный размер (260 символов).
Использование try .. catch не перехватило необработанные исключения из библиотеки C. Есть ли способ создать исключение? Спасибо
Комментарии:
1. OT:
#define MAX 260
это то, что вы хотите.2. явно сравнивать
strlen(val) < MAX
?3. В C. нет исключений
wcscpy_s
, это функция C, и она не может генерировать исключение.4. что не так
return L"C:\ProgramData\Product....
? Вам не нужны функции C для копирования или создания строк C5. Правильный способ сделать это — убедиться, что «исключение» никогда не возникает в первую очередь. Не пытайтесь перехватывать нарушения доступа, это не способ.