在 c++ 中抛出一个值(如果该值为 null)

Throwing a value in c++ if it is null

本文关键字:一个 null 如果 c++      更新时间:2023-10-16

>我正在尝试检查字符指针是否为空。如何检查值是否为空,我基本上来自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*'实例后终止调用"

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

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

您需要使用 try/catch 块来捕获异常并处理它。

例如:

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

请注意,抛出 C 字符串作为异常确实不合适。请参阅C++异常 - 将 c 字符串作为异常抛出不好吗?正如@Jefffrey所评论的那样,将就此以及替代方案进行讨论。

相关文章: