0

我正在尝试检查字符指针是否为空。如何检查值是否为空我基本上来自 java

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 *'的实例后调用终止”

4

2 回答 2

9

问题不在于测试:你的两个if都是正确的(就编译器而言——出于可读性的原因,第二个更可取)。问题是你没有在任何地方捕捉到异常。您正在抛出 a char const[13],它被转换为 a作为异常的类型,并且您在调用代码中char const*没有任何地方。catch ( char const* )

在 C++ 中,通常(但根本不需要)只抛出从std::exception;派生的类类型。关于此规则的唯一例外是抛出一个intfor 程序关闭,然后仅当这是您工作的上下文中记录的约定时。(它只有在main捕获int并返回值时才能正常工作。)

于 2012-09-27T17:21:57.730 回答
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++ 异常 - 将 c-string 作为异常抛出是否不好?正如@Jefffrey 评论的那样,讨论了这一点以及替代方案。

于 2012-09-27T17:21:16.013 回答