C检查NULL和&错误处理

时间:2013-09-21 07:51:03

标签: c error-handling

我有对字符串执行操作的函数。例如,String *concat(s1, s2);这将转为s1 + s2并返回一个新的字符串。

我想另一个用户可以发送NULL参数。 我可以检查NULL。

if(s1 == NULL || s2 == NULL)
  return NULL;

然后返回NULL。

或者我可以通过以下方式退出整个程序:

exit(EXIT_FAILURE);

我认为解决问题的最佳方法是退出函数而不返回任何内容。但是,如果我的用户期待String并且我刚刚返回,那么他不会崩溃并烧毁吗?我也觉得打印给用户是个坏主意。

我很想找到退出该功能的方法,并且无论如何都允许程序继续执行。

2 个答案:

答案 0 :(得分:1)

由于C没有例外,您必须在返回值中发出错误信号。虽然在这种情况下为无效输入声音返回NULL听起来不错,但您可以更改设计,以便返回错误代码和连接字符串:使函数接受三个参数,其中一个参数为out参数。

int concat(string s1, string s2, string *out)

如果出现错误,该函数将返回错误代码,否则会将结果写入out参数。

答案 1 :(得分:1)

取决于是否允许NULL(按设计)输入值。如果是,您可以:

  • 返回NULL(如果允许返回值 - 可能是,因为您认为它是允许的输入值)
  • 通过返回状态代码或使用某种errno
  • 来指示某些错误情况

如果NULL是无效值,则传递NULL是程序员错误,因此必须由函数的调用者进行检查。您可以使用前两种方法,也可以:

  • 利用“未定义的行为”,任何事情都可能发生。使用断言可能是最好的方法:

    #include <assert.h>
    
    assert (str1 != NULL && str2 != NULL);
    

使用断言的优势在于,在释放缓冲区中,您可以关闭检查,这样就不会有任何性能损失。

现在重要的部分是:无论你采取哪种方式,都要清楚地记录并坚持下去。