2012-09-27 3 views
0

Я пытаюсь проверить указатель на символ является нулевым .Как проверить, если значение равно нулю я в основном из JavaБросив значение в C++, если она равна нулю

char* mypath = getenv("MYPATH"); 
if(!mypath) //this is not working 
    throw "path not found"; 
if(mypath == NULL) //this is also not working 
     throw "path not found"; 

я получаю исключение «прекратить вызванный после бросания экземпляра «char const *»

+0

Компилятор не знает, что делать, за исключением типа 'char const *' - вам нужно определить 'catch'-clause, char const * '-exceptions. – vstm

+0

Исходя из Java, вы с тревогой узнаете, что результат неперехваченного исключения в C++ заключается не в том, что программа печатает стек и уходит. Он просто заканчивается. О единственной хорошей новостью заключается в том, что вы можете настроить отладчик на разрыв, когда бросается неперехваченное исключение, поэтому вы остаетесь глядя на сайт броска. –

ответ

9

Проблема не в тесте: оба из ваших if правильны (насколько компилятор встречается — второй предпочтительнее по соображениям удобочитаемости). Проблема в том, что вы никого не ломаете. Вы бросаете char const[13], который преобразуется в char const* как тип исключения, и вы не имеете catch (char const*) в любом месте вызывающего кода.

В C++ обычно (но вовсе не требуется) бросать только типы классов, полученные из std::exception; единственное исключение из этого правила - это выбросить int для выключения программы, а затем только если это документированное соглашение в том контексте, в котором вы работаете. (Он работает только правильно, если main ловит int и возвращает значение.)

6

Вам нужно использовать блок try/catch, чтобы поймать исключение и обработать его.

Например:

#include <stdio.h> 
int main(void) 
{ 
    try { 
    throw "test"; 
    } 
    catch (const char *s) { 
    printf("exception: %s\n", s); 
    } 
    return 0; 
} 

Пожалуйста, обратите внимание, что бросать строку C как исключение действительно не подходит. См. C++ Exceptions - Is throwing c-string as an exception bad?, как прокомментировал @Jefffrey для обсуждения этого вопроса наряду с альтернативами.

Смежные вопросы