2

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

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

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

并且只返回 NULL。

或者我可以让整个程序退出:

exit(EXIT_FAILURE);

我认为解决问题的最好方法是退出函数而不返回任何东西。但是,如果我的用户期待 String 而我只是返回,他不会崩溃和烧毁吗?我也觉得向用户打印是个坏主意。

我很想找到一种退出函数的方法,并且无论如何都允许程序继续执行。

4

2 回答 2

1

由于 C 没有异常,您必须在返回值中指示错误条件。虽然在这种情况下为无效输入返回 NULL 听起来是一个不错的选择,但您可以更改设计,以便可以返回错误代码和连接的字符串:使函数接受三个参数,其中一个是输出参数。

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

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

于 2013-09-21T08:04:33.687 回答
1

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

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

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

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

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

使用断言的优势在于,在发布版本中,您可以关闭检查,因此不会有任何性能损失。

现在是重要的部分:无论您采取哪条路线,都要清楚地记录并坚持下去。

于 2013-09-21T12:43:56.917 回答