как перехватить необработанное исключение в коде C

#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 для копирования или создания строк C

5. Правильный способ сделать это — убедиться, что «исключение» никогда не возникает в первую очередь. Не пытайтесь перехватывать нарушения доступа, это не способ.