我正在尝试检查字符指针是否为空。如何检查值是否为空我基本上来自 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 *'的实例后调用终止”
我正在尝试检查字符指针是否为空。如何检查值是否为空我基本上来自 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
都是正确的(就编译器而言——出于可读性的原因,第二个更可取)。问题是你没有在任何地方捕捉到异常。您正在抛出 a char const[13]
,它被转换为 a作为异常的类型,并且您在调用代码中char const*
没有任何地方。catch ( char const* )
在 C++ 中,通常(但根本不需要)只抛出从std::exception
;派生的类类型。关于此规则的唯一例外是抛出一个int
for 程序关闭,然后仅当这是您工作的上下文中记录的约定时。(它只有在main
捕获int
并返回值时才能正常工作。)
您需要使用 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 评论的那样,讨论了这一点以及替代方案。