我有对字符串执行操作的函数。例如,String *concat(s1, s2);
这将转为s1 + s2并返回一个新的字符串。
我想另一个用户可以发送NULL参数。 我可以检查NULL。
if(s1 == NULL || s2 == NULL)
return NULL;
然后返回NULL。
或者我可以通过以下方式退出整个程序:
exit(EXIT_FAILURE);
我认为解决问题的最佳方法是退出函数而不返回任何内容。但是,如果我的用户期待String并且我刚刚返回,那么他不会崩溃并烧毁吗?我也觉得打印给用户是个坏主意。
我很想找到退出该功能的方法,并且无论如何都允许程序继续执行。
答案 0 :(得分:1)
由于C没有例外,您必须在返回值中发出错误信号。虽然在这种情况下为无效输入声音返回NULL听起来不错,但您可以更改设计,以便返回错误代码和连接字符串:使函数接受三个参数,其中一个参数为out参数。
int concat(string s1, string s2, string *out)
如果出现错误,该函数将返回错误代码,否则会将结果写入out参数。
答案 1 :(得分:1)
取决于是否允许NULL(按设计)输入值。如果是,您可以:
errno
值如果NULL是无效值,则传递NULL是程序员错误,因此必须由函数的调用者进行检查。您可以使用前两种方法,也可以:
利用“未定义的行为”,任何事情都可能发生。使用断言可能是最好的方法:
#include <assert.h>
assert (str1 != NULL && str2 != NULL);
使用断言的优势在于,在释放缓冲区中,您可以关闭检查,这样就不会有任何性能损失。
现在重要的部分是:无论你采取哪种方式,都要清楚地记录并坚持下去。