2012-09-27 33 views
0

我試圖檢查字符指針是空的。如何檢查,如果該值爲null我從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語句來捕獲' char const *' - 異常。 – 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的評論,對其進行討論並提供替代方案。